我看到很多开源的代码都有这样的用处,比如有一个接口A,然后有一个抽象类B实现了接口A,然后有一个接口C继承了接口A,然后有一个抽象类D继承了B同时实现接口C。这样D就类似间接的实现了两次A接口,我不知道这样的用法的初衷。请大大们解惑。小弟感激不尽.
抽象类b实现接口a,他可能没有完全实现a的方法。b可以有自己的新方法。c类继承接口a,他可以获得a里面所有的抽象方法,常量属性,内部类,枚举等等。d继承b同时实现c,就是吧上面两个情况综合一下,如果b实现a的某方法,那么d中调用的就是b实现的这个,如果b中没实现a的方法,d中也可以访问a的这个方法。所以d可以实现a的方法,也可以有b里的新方法。我说的不太明白,你自己写几个类和接口看一下就知道了
我觉得你不应该纠结貌似实现两次接口的问题上,其实应该还是只实现一次。以下是我个人对抽象类和接口的理解:接口注重的是:做什么。抽象类注重的是:是什么。比如汽车例子。接口A:跑。抽象类B:普通汽车,实现接口A。接口C:飞,继承接口A,因此接口C代表又能跑又能飞。抽象类D:高级汽车,继承抽象类B,实现接口C。综上所述:普通汽车能跑。高级汽车有喷射飞行系统,是基于普通汽车改装的,它既能跑又能飞。如果还有一架飞机(抽象类E),飞机也能跑和飞,也可以实现接口C。另外我觉得接口就像管道,接口A是等于是一条两种不同的东西的共同通道。以上是我个人理解,如果有错,请各位大大指出,我是新手,勿喷。。。
很明显 程序类继承了D,说明程序类D是程序类B的子类,B为抽象类,说明B自身已经包含了一些成员变量和成员方法。D有实现了接口C,你要知道虽然D虽然继承了B,但B和C还是不一样的。每次的继承和实现都是因为有新的内容加入,即每个子类都有不同于父类的特性。 对于你说的 D间接实现了两次A接口,你的目标理解反了,这个设计为的是实现了不同子类的不同特性。既然D间接实现了两次A接口,但A接口只有一个,D也要实现一次接口,不存在你说的多次的问题。
用的手机,简单给你说一下。重写必须出现在继承中,子类中的方法名必须跟父类中的方法名相同,而且参数个数,类型也必须相同。重载出现在一个类中,一个类中可以有多个方法,但是每个方法的参数个数,类型必须不同才叫重载。覆盖是方法名相同,参数的顺序不同,个数类型也不同跟重载区别不大。不明白可以再联系我
使用接口方式继承,继承了多继承方式的强大功能,降低了多继承的复杂性,有利于设计更加健壮的系统更加便于维护、理解、其他程序员的阅读java中的类是不允许多继承的,而接口可以多继承,算是一点弥补,然后就是使用接口可以封装具体的实现,不向外部暴露具体的实现细节,只将接口暴露出来,用户也只能够通过接口访问,这样也有一定的安全性。