匿名内部类
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之后此要求改变)