new 接口就会发生很有意思的现象
public class InerClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub new OutClass().callB(new B() { @Override public void echo() { // TODO Auto-generated method stub System.out.println("多态的一种展示形式"); } }); } } interface B{ public void echo(); } class OutClass{ public void callB(B b) { b.echo(); } }
new 接口 其实是生成了一个匿名的已经实现过接口抽象方法的类。我们用反编译工具发现这段代码生成了如下几个class文件
B.class 是接口 InnerClassDemo是有mian方法的入口类 OutClass是我们的实际操作的类。那么这个InnerClassDemo$1.class 是什么鬼。
最后发现这个类,其实是一个实现了B接口的一个类。其实这个就是当new 接口的时候,会自动创建一个实现了接口的一个类,然后调用它实现过的抽象方法。