关于java接口的一个疑问

public interface TestInterface {
    public void print();
}

public class Demo1 {
    TestInterface t1 = new TestInterface() {
        
        @Override
        public void print() {
            // TODO Auto-generated method stub
            System.out.println("Demo1");
        }
    };
    
    public static void main(String[] args) {
        Demo1 d1 = new Demo1();
        d1.t1.print();
    }
}

疑惑是为什么接口可以用new这样的形式,虽然在new的同时对接口中的方法进行了重载,但还是有些迷惑,对于接口,这种形式的实例化怎么解释会比较通顺,先谢谢回答的人: )

封不羁
浏览 1690回答 2
2回答

丶小八戒

首先纠正你一下,实现接口的方法叫方法覆盖,方法名相同参数不同才是方法重载。接着,你想一下,一个类实现一个接口,只要这个类实现了接口的所有方法,那么这个类就是可以实例化的。你上面的写法,内部类已经实现了接口的所有方法(即这里的print()方法),只是没给这个实现接口的类取个名字而已,所有它可以实例化,通俗点,就是可以new。

时间妖

这种new形式是 匿名内部类,但由于TestInterface是接口,所以这个类与TestInterface接口是implements关系。这个可以通过在“cmd”下输入“javap + 生成的'文件名$数字.class'”进行反编译,这样能看到一个继承关系。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java