new一个接口的实质是什么?

big_hair_ 2017-06-12 09:14:55
比如:定义一个会接口 会游泳 swimable,实现类Fish。
第一种:
Swimable a = new Swimable() {
@Override
public void swim() {
System.out.println("会游泳)
}
};


第二种:Swimable a = new Fish() ;

第一种是直接new一个接口,第二个是用一个接口类型变量来接收一对象,这两者的原理都是什么呢?可以直接new接口?还有这两者有什么区别啊?


...全文
614 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a87985426 2017-06-13
  • 打赏
  • 举报
回复
第二个多态特性.
MikeDDT009 2017-06-12
  • 打赏
  • 举报
回复
引用 6 楼 big_hair_ 的回复:
[quote=引用 1 楼 cold_long 的回复:] 我们定义一个接口的时候,不需要关注他里面的方法内容是是什么,只需要知道,这个接口有这个方法。我们创建接口的对象的时候,可以创建接口的对象,就可以应用里面的方法。创建实现借口的类的对象也是同样的道理,只不过,我们可以在此重写这个方法,来改变我们最后所需要得到的结果。
接口不是不能创建对象么?[/quote] 他说的接口的对象应该是实现这个接口的类的对象。接口也实用向上转型。理解的时候就当是“继承”(实现接口)接口。所以“子类”(实现接口了这个接口的类)。也就是说子类的对象就是父类的对象---------这里实质就是能用父类的引用指向子类的对象。并不代表父类就能new一个对象(比如接口Aaa a不能new Aaa()的对象。只能说Aaa a = 实现接口的对象)。
big_hair_ 2017-06-12
  • 打赏
  • 举报
回复
引用 1 楼 cold_long 的回复:
我们定义一个接口的时候,不需要关注他里面的方法内容是是什么,只需要知道,这个接口有这个方法。我们创建接口的对象的时候,可以创建接口的对象,就可以应用里面的方法。创建实现借口的类的对象也是同样的道理,只不过,我们可以在此重写这个方法,来改变我们最后所需要得到的结果。
接口不是不能创建对象么?
big_hair_ 2017-06-12
  • 打赏
  • 举报
回复
引用 3 楼 still_rain 的回复:
第一种是声明并创建了一个匿名内部类及其对象,该类实现了 swimable接口,第二种是面向接口的编程方式,方便程序以后的修改与扩展。没有接口对象一说,只有实现接口的类及其实例对象。
额,差不多明白了,第一种其实是默认创建了一个实现了此接口的匿名内部类和它的对象。第二种是创建了实现了这个接口的类的对象。只有再去看看面向接口编程有关知识了。谢谢了。
big_hair_ 2017-06-12
  • 打赏
  • 举报
回复
引用 2 楼 cold_long 的回复:
还有,你的Fish类在创建的时候就要用implements去实现游泳接口
额,是在创建实现类的时候就重写接口方法,是不太明白这里,可以去new接口?
爱摸鱼de老邪 2017-06-12
  • 打赏
  • 举报
回复
第一种是声明并创建了一个匿名内部类及其对象,该类实现了 swimable接口,第二种是面向接口的编程方式,方便程序以后的修改与扩展。没有接口对象一说,只有实现接口的类及其实例对象。
万汉龙 2017-06-12
  • 打赏
  • 举报
回复
还有,你的Fish类在创建的时候就要用implements去实现游泳接口
万汉龙 2017-06-12
  • 打赏
  • 举报
回复
我们定义一个接口的时候,不需要关注他里面的方法内容是是什么,只需要知道,这个接口有这个方法。我们创建接口的对象的时候,可以创建接口的对象,就可以应用里面的方法。创建实现借口的类的对象也是同样的道理,只不过,我们可以在此重写这个方法,来改变我们最后所需要得到的结果。

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧