您的位置:首页 > 编程语言 > Java开发

java 类的继承体系

2016-01-15 18:18 274 查看


如果类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里面的情况,否则没有必要这么做。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: