java8 支持多重继承吗?如何实现
- 支持,可使用1个接口比如
IServiceSon
extends
多个其他的接口,比如IServiceF
IServiceM
- 再用 实现类
ServiceSonImpl
implements IServiceSon
即可。 - 因为java8 的接口中支持
default
方法体,所以其实IServiceF
IServiceM
接口跟class父类是一样了,可以写方法体了。 - 如此就相当于实现了多继承
多继承优先级问题
总体原则
1)距离近的,关系近的 优先级更高。
2)接口与class 同样距离时,优先继承class。
3) 参考
e.g.
- 如果 A1 是 A2 的爹, A2 是 C的爹,所以可以说 A1是 C的爷爷。
- C 有2个父类,当C 中
@Orverride
父类中的方法时,究竟覆盖的是谁呢?这就是 多重继承需要解决的优先级问题 - 如果 A1 和 A2 中,都有
default method()
,那么,C 中 重写了 该default method()
时,究竟执行的是谁的呢? - 结论:执行的是 A2的,因为距离更近。
- 虽然 俩父类,但是 毕竟 A1 可以看作是爷爷,关系远一点。。
- 不推荐上图这种复杂关系,实际开发中,A1和A2 两个相互之间 最好没有关系,避免 A1的特性和方法被 A2 所替代,导致混乱的不可预期的结果。
- 将Interface3 换成class 实现类,一样的效果