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 接口的时候,会自动创建一个实现了接口的一个类,然后调用它实现过的抽象方法。

posted on 2018-07-18 10:39  invokermiracle  阅读(118)  评论(0编辑  收藏  举报