JAVA中一个类A既继承一个基类B,基类B本身实现了接口C,类A自己又实现了接口C,这样做的目的是什么呢?

image.png
比如Dubbo编解码Codec2涉及的类图如上所示,DubboCodec既继承ExchangeCodec,又实现了Codec2接口,然而ExchangeCodec本身的抽象基类AbstractCodec已经实现了Codec2接口。

public class DubboCodec extends ExchangeCodec implements Codec2 {
}

这样做的目的是什么呢?DubboCodec并没有对Codec2中的接口进行重写。

阅读 3.4k
3 个回答

类似于ArrayList继承了AbstractList又实现了List,主要提高可读性,可以直接看出实现了某个接口

  • 简单一些理解是为了方法的公用. 接口C只是定义了一些行为方法。实现可以有多个,但是有些方法可能存在通用性,因此有基类B作为父类实现一次C接口的方法, 当有另外的类想要实现接口C的时候发现有些方法和基类B一样的逻辑,只有部分接口的逻辑需要调整, 此时类A去继承B将方法覆盖即可达到目标,简化了代码量,提高了复用性 (拙见)

image.png

com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec 标注
implements Codec2 确实可以增加可读性. 但是去掉也不会影响. 真正的实现方法还父类中 最开始的实现是com.alibaba.dubbo.remoting.transport.codec.TransportCodec 层层往下
image.png

新手上路,请多包涵

图我就不看了,如果你描述跟图一样的话。
直接答,目的是为了【覆盖】,多态。

类B实现了C,但类A不想使用类B实现C的行为,因此类A重新实现了接口C的行为。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏