匿名内部类

来源:互联网 发布:域名批量搜索 编辑:程序博客网 时间:2024/06/07 03:50
/*
匿名内部类:没有类名的类就称作为匿名内部类

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

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

匿名内部类一般用于实参

*/
//继承关系下的匿名内部类
abstract class Animal1{
    public abstract void run();
    public abstract void sleep();
}

class Outer2{
    public void print(){
        //在方法内部定义一个类继承Animal类,并且调用run方法和sleep方法
        //局部内部类
        /*class Dog extends Animal{
            public Dog(String name) {
                super(name);
            }

            public void run(){
                System.out.println("狗在跑...");
            }
            
            public void sleep(){
                System.out.println("狗睁大眼睛在睡觉...");
            }
        }
        Dog d = new Dog("豆豆");
        d.run();
        d.sleep();*/
        
        new Animal1(){//创建一个Animal1的子类对象,只是改子类没有类名,所以继承了父类的名字

            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void sleep() {
                // TODO Auto-generated method stub
                
            }};
        
    }
}

public class Demo6 {

    public static void main(String[] args) {
        Outer2 outer = new Outer2();
        outer.print();
    }
}



//接口关系下的匿名内部类

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

interface Dao2{
    public void add();
}

class Outer3{
    public void print(){
        //创建一个匿名内部类的对象
        new Dao2(){//这里不是创建接口的对象,而是创建接口实现类的对象。

            @Override
            public void add() {
                System.out.println("添加成功...");
                
            }
        }.add();
    }
}

public class Demo7 {

    public static void main(String[] args) {
        test(new Dao2(){//匿名内部类用作实参

            @Override
            public void add() {
                System.out.println("添加员工成功...");
                
            }
        });
    }
    
    public static void test(Dao2 d){//形参类型是一个接口引用
        d.add();
    }
}



原创粉丝点击