java-匿名内部类

来源:互联网 发布:mysql的配置 编辑:程序博客网 时间:2024/05/21 00:54

匿名内部类:

  • 没有类名的类。

  • 匿名内部类一般是用于实参传递。

匿名内部类的好处:

  • 用于实参传递简化书写。

匿名内部类的使用前提:

  • 必须存在继承或者实现的关系才能使用。

  • 当匿名内部类中存在特有方法的时候,就不能使用匿名内部类了,只能使用局部内部类。

继承关系下的匿名内部类:

  • 注意:当存在特有方法时,就不能使用匿名内部类了,只能使用局部内部类。
/*继承关系下的匿名内部类:*/abstract class Animal{    public abstract Animal run();    public abstract void sleep();}class Outer{    public void print(){        //需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。        /*        //局部内部类        class Dog extends Animal{            public void run(){                System.out.println("狗在跑..");            }            public void sleep(){                System.out.println("狗趴在睁开眼睛睡..");            }        }        //创建对象        Dog d = new Dog();        d.run();            d.sleep();        */          //匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。        // 匿名内部类与Animal是继承 的关系。  目前是创建Animal子类的对象.     Animal  a = new Animal(){  //注意:变量a ,类型Animal。多态的体现。            //匿名内部的成员             public Animal run(){                System.out.println("狗在跑..");                return this;//返回当前对象            }            public void sleep(){                System.out.println("狗趴在睁开眼睛睡..");            }//          //注意:当存在特有方法的时候!就不能使用匿名内部类了因//为没有类名无法进行类型转换。            //特有的方法//          public void bite(){//              System.out.println("狗在咬人..");//          }        };          a.run();        a.sleep();    }}class Demo6 {    public static void main(String[] args)     {        //System.out.println("Hello World!");        Outer outer = new Outer();        outer.print();    }}

实现关系下的匿名内部类:

//实现关系下匿名内部类interface Dao{    public void add();}class Outer{    public void print(){        //创建一个匿名内部类的对象        new Dao(){   //不是接口不能创建对象吗?怎么现在又可以了?                     //因为:创建的是接口实现类的对象,这个实现类是匿名的内部类对象(只是借用了接口的名字)。             public void add(){                System.out.println("添加成功");             }        }.add();    }}class Demo7 {    public static void main(String[] args)     {        test(new Dao(){            public void add(){                System.out.println("添加员工成功");            }        });    }    /*    *   匿名内部类一般是用于实参。    */    //调用这个方法...    public static void  test(Dao d){  //形参类型是一个接口引用..只能传接口的实现类进来        d.add();    }}
0 0
原创粉丝点击