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

我看到很多开源的代码都有这样的用处,比如有一个接口A,然后有一个抽象类B实现了接口A,然后有一个接口C继承了接口A,然后有一个抽象类D继承了B同时实现接口C。
这样D就类似间接的实现了两次A接口,我不知道这样的用法的初衷。
请大大们解惑。
小弟感激不尽.
最新回答
上帝的女孩

2021-07-21 05:37:36

抽象类b实现接口a,他可能没有完全实现a的方法。b可以有自己的新方法。
c类继承接口a,他可以获得a里面所有的抽象方法,常量属性,内部类,枚举等等。
d继承b同时实现c,就是吧上面两个情况综合一下,
如果b实现a的某方法,那么d中调用的就是b实现的这个,如果b中没实现a的方法,d中也可以访问a的这个方法。所以d可以实现a的方法,也可以有b里的新方法。
我说的不太明白,你自己写几个类和接口看一下就知道了
什么长发及腰不如短发凉

2022-10-24 09:58:41

我觉得你不应该纠结貌似实现两次接口的问题上,其实应该还是只实现一次。

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

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

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

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

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

以上是我个人理解,如果有错,请各位大大指出,我是新手,勿喷。。。
萌姐姐不萌

2021-04-19 07:31:02

  很明显 程序类继承了D,说明程序类D是程序类B的子类,B为抽象类,说明B自身已经包含了一些成员变量和成员方法。D有实现了接口C,你要知道虽然D虽然继承了B,但B和C还是不一样的。每次的继承和实现都是因为有新的内容加入,即每个子类都有不同于父类的特性。
  对于你说的 D间接实现了两次A接口,你的目标理解反了,这个设计为的是实现了不同子类的不同特性。既然D间接实现了两次A接口,但A接口只有一个,D也要实现一次接口,不存在你说的多次的问题。
听风入韵

2022-08-03 03:13:29

用的手机,简单给你说一下。重写必须出现在继承中,子类中的方法名必须跟父类中的方法名相同,而且参数个数,类型也必须相同。重载出现在一个类中,一个类中可以有多个方法,但是每个方法的参数个数,类型必须不同才叫重载。覆盖是方法名相同,参数的顺序不同,个数类型也不同跟重载区别不大。不明白可以再联系我
幽兰黛尔

2022-04-15 15:20:02

使用接口方式继承,继承了多继承方式的强大功能,降低了多继承的复杂性,有利于设计更加健壮的系统
更加便于维护、理解、其他程序员的阅读
java中的类是不允许多继承的,而接口可以多继承,算是一点弥补,然后就是使用接口可以封装具体的实现,不向外部暴露具体的实现细节,只将接口暴露出来,用户也只能够通过接口访问,这样也有一定的安全性。