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的同时对接口中的方法进行了重载,但还是有些迷惑,对于接口,这种形式的实例化怎么解释会比较通顺,先谢谢回答的人: )
2 回答
已采纳
丶小八戒
TA贡献18条经验 获得超7个赞
首先纠正你一下,实现接口的方法叫方法覆盖,方法名相同参数不同才是方法重载。
接着,你想一下,一个类实现一个接口,只要这个类实现了接口的所有方法,那么这个类就是可以实例化的。
你上面的写法,内部类已经实现了接口的所有方法(即这里的print()方法),只是没给这个实现接口的类取个名字而已,所有它可以实例化,通俗点,就是可以new。
时间妖
TA贡献1条经验 获得超1个赞
这种new形式是 匿名内部类,但由于TestInterface是接口,所以这个类与TestInterface接口是implements关系。
这个可以通过在“cmd”下输入“javap + 生成的'文件名$数字.class'”进行反编译,这样能看到一个继承关系。
添加回答
举报
0/150
提交
取消