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里面的情况,否则没有必要这么做。相关文章推荐
- 启动eclipse出现错误提示:an error hava occured,see the log
- springmvc 中ajax传输数据(对象)
- 开始学java
- Spring组件扫描<context:component-scan/>使用详解
- leetcode 005 Longest Palindromic Substring(java)
- java.lang.OutOfmemoryError: PermGen Space
- The Struts dispatcher cannot be found在struts2中出现的问题
- 记一个eclipse 错误 Undefined variable from import: randrange
- java 集合和映射的类继承图
- springBoot上传文件大小设置
- 一维码批量生成Java实现
- 蓝桥杯-基础题-序列排序
- java 实现快速排序法
- Java 抽象类
- java集合:二叉树
- 初识Java
- AndroidNDK初步开发之安装eclipse插件支持jni开发(一)
- Spring分布式事务- 三种实现方式(Spring+JTA)
- 蓝桥杯-入门训练-Fibonacci数列
- jsp,js引用Java常量