为了账号安全,请及时绑定邮箱和手机立即绑定

关于java接口的一个疑问

关于java接口的一个疑问

封不羁 2015-08-14 08:14:21
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。



查看完整回答
1 反对 回复 2015-08-14
  • 封不羁
    封不羁
    先谢谢你纠正我的一个术语错误- -,嗯,之前一直想得表面了,看过抽象类不能用new进行实例化就一直停留在字面意思了,再次谢谢: )
?
时间妖

TA贡献1条经验 获得超1个赞

这种new形式是 匿名内部类,但由于TestInterface是接口,所以这个类与TestInterface接口是implements关系。

这个可以通过在“cmd”下输入“javap + 生成的'文件名$数字.class'”进行反编译,这样能看到一个继承关系。

查看完整回答
1 反对 回复 2015-08-14
  • 2 回答
  • 0 关注
  • 1693 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信