匿名内部类

2018-03-27  本文已影响16人  落在牛背上的鸟

为什么需要匿名内部类?

interface Message {
    public void print();
}

interface MessageImpl extends Message {
    public void print() {
        System.out.println("Hello World !");
    }
}

public class AnonymousDemo {
    public static void main(String[] args) {
        fun(new MessageImpl());
    }
    public static void fun(Message msg){
        msg.print();
    }
}

正常的规律是一个接口或抽象类需要又子类,子类覆写所有的抽象方法。如果MessageImpl 子类只使用唯一的一次,那么还有必要将其定义为一个类吗?所以这时候就可以采用匿名内部类的方式简化代码。

interface Message {
    public void print();
}

public class AnonymousDemo {
    public static void main(String[] args) {
        fun(new Message() {
            public void print() {
                System.out.println("Hello World!");
            }
        });
    }
    public static void fun(Message msg){
        msg.print();
    }
}

使用内部类的前提:必须要基于接口或者抽象类的应用。如果匿名内部类定义在了方法里面,方法的参数或者是变量要被匿名内部类访问,必须加上final关键字(JDK1.8之后此要求改变)

上一篇 下一篇

猜你喜欢

热点阅读