java-匿名内部类

匿名内部类:

  • 没有类名的类。

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

匿名内部类的好处:

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

匿名内部类的使用前提:

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

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

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

  • 注意:当存在特有方法时,就不能使用匿名内部类了,只能使用局部内部类。
/*

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

*/

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();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值