java 类的继承体系


如果类A继承了一个抽象类B(抽象类B已经实现了接口C),为什么还要实现接口C呢?

问题描述

详细描述见:http://segmentfault.com/q/1010000004314755?_ea=566429


原因分析

1、原因1

虽然抽象类B implements C.但是,有可能B中的并没有真正实现C接口中的方法--因为B是抽象类,抽象类可以不实现接口中的方法,而是直接用 abstract 修饰。如 abstract void method();
那么,由于A extends B, 而 A不是抽象类,那么A就得完全实现 method()方法了。


评价:我觉得这个原因是靠谱的,而且应该是唯一的原因。

我看了一下源码,AbstractMap抽象类确实没有实现Map接口所有的方法(比如:public abstract Set<Entry<K,V>> entrySet();)。


2、原因2

假设……仅仅是假设……下面所说这种情况极难发生,但并不排除其可能性

因为框架需要,AbstractList 不再实现 List 接口,而是实现 NewList 接口,这个时候 ArrayList 仍然要实现 List 接口,而且需要从 AbstractList 继承以实现复用……现在发挥你的相像力……

这在相对成熟的 JDK 中几乎不会发生,但难免你自己写的代码里可能会发生这种事情。而 JDK 自己的代码,就是一个设计模式和开发的典范,所以……

参考:http://segmentfault.com/q/1010000003018219

评价:这个勉强可以作为这样设计的一个原因。

虽然从类的设计上来说,最好是这么做。但是,如果真的这么做的话,代码是不是看着也很累啊,一大堆重复的东西。真是充满矛盾。

3、原因3

看起来一目了然,就知道HashMap实现了Map。

评价:这个就有点扯了。

解决方法

除非是出现原因1里面的情况,否则没有必要这么做。







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值