JAVA抽象类、接口继承的疑惑

我看到很多开源的代码都有这样的用处,比如有一个接口A,然后有一个抽象类B实现了接口A,然后有一个接口C继承了接口A,然后有一个抽象类D继承了B同时实现接口C。这样D就类似... 我看到很多开源的代码都有这样的用处,比如有一个接口A,然后有一个抽象类B实现了接口A,然后有一个接口C继承了接口A,然后有一个抽象类D继承了B同时实现接口C。
这样D就类似间接的实现了两次A接口,我不知道这样的用法的初衷。
请大大们解惑。
小弟感激不尽.
展开
 我来答
专治八阿哥的孟老师
2013-04-15 · 爱生活,爱编程,专心于学习技术和撸猫
专治八阿哥的孟老师
采纳数:494 获赞数:3914

向TA提问 私信TA
展开全部
抽象类b实现接口a,他可能没有完全实现a的方法。b可以有自己的新方法。
c类继承接口a,他可以获得a里面所有的抽象方法,常量属性,内部类,枚举等等。
d继承b同时实现c,就是吧上面两个情况综合一下,
如果b实现a的某方法,那么d中调用的就是b实现的这个,如果b中没实现a的方法,d中也可以访问a的这个方法。所以d可以实现a的方法,也可以有b里的新方法。
我说的不太明白,你自己写几个类和接口看一下就知道了
佼梦安00c
2013-04-15 · 超过12用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:33.1万
展开全部
我觉得你不应该纠结貌似实现两次接口的问题上,其实应该还是只实现一次。

以下是我个人对抽象类和接口的理解:
接口注重的是:做什么。抽象类注重的是:是什么。
比如汽车例子。

接口A:跑。
抽象类B:普通汽车,实现接口A。
接口C:飞,继承接口A,因此接口C代表又能跑又能飞。
抽象类D:高级汽车,继承抽象类B,实现接口C。

综上所述:
普通汽车能跑。
高级汽车有喷射飞行系统,是基于普通汽车改装的,它既能跑又能飞。

如果还有一架飞机(抽象类E),飞机也能跑和飞,也可以实现接口C。

另外我觉得接口就像管道,接口A是等于是一条两种不同的东西的共同通道。

以上是我个人理解,如果有错,请各位大大指出,我是新手,勿喷。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
砖石心肠
2013-04-15
知道答主
回答量:16
采纳率:0%
帮助的人:7.6万
展开全部
  很明显 程序类继承了D,说明程序类D是程序类B的子类,B为抽象类,说明B自身已经包含了一些成员变量和成员方法。D有实现了接口C,你要知道虽然D虽然继承了B,但B和C还是不一样的。每次的继承和实现都是因为有新的内容加入,即每个子类都有不同于父类的特性。
  对于你说的 D间接实现了两次A接口,你的目标理解反了,这个设计为的是实现了不同子类的不同特性。既然D间接实现了两次A接口,但A接口只有一个,D也要实现一次接口,不存在你说的多次的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
栾秀爱回卿
2020-05-29 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.3万
采纳率:27%
帮助的人:783万
展开全部
用的手机,简单给你说一下。重写必须出现在继承中,子类中的方法名必须跟父类中的方法名相同,而且参数个数,类型也必须相同。重载出现在一个类中,一个类中可以有多个方法,但是每个方法的参数个数,类型必须不同才叫重载。覆盖是方法名相同,参数的顺序不同,个数类型也不同跟重载区别不大。不明白可以再联系我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
摆渡的旱鸭子
2013-04-15 · TA获得超过148个赞
知道答主
回答量:177
采纳率:0%
帮助的人:87.5万
展开全部
使用接口方式继承,继承了多继承方式的强大功能,降低了多继承的复杂性,有利于设计更加健壮的系统
更加便于维护、理解、其他程序员的阅读
java中的类是不允许多继承的,而接口可以多继承,算是一点弥补,然后就是使用接口可以封装具体的实现,不向外部暴露具体的实现细节,只将接口暴露出来,用户也只能够通过接口访问,这样也有一定的安全性。
追问
我知道继承的好处,现在疑惑的是为什么D继承抽象类的时候抽象类已经实现了A接口,维护D又一次的实现C接口,C接口又实现了A接口,那么就是D间接实现两次A接口,这个有什么用,通畅用来解决什么问题.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式