java匿名内部类

来源:互联网 发布:马尔可夫链转移矩阵 编辑:程序博客网 时间:2024/06/08 11:47

java匿名内部类

匿名内部类:没有类名的类就称作为匿名内部类。

匿名内部类的好处:简化书写。

匿名内部类的使用前提:必须存在继承或者实现关系才能使用。

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

实例1:

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(){  //多态            //匿名内部的成员             public Animal run(){                System.out.println("狗在跑..");                return this;            }            public void sleep(){                System.out.println("狗趴在睁开眼睛睡..");            }            //特有的方法            public void bite(){                System.out.println("狗在咬人..");            }        };        a.bite();        a.run();        a.sleep();    }}class Demo6 {    public static void main(String[] args)     {        //System.out.println("Hello World!");        Outer outer = new Outer();        outer.print();    }}

实例2:

//实现关系下匿名内部类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();    }}
原创粉丝点击