前些写用LinkedHashSet带来的思考(http://rmn190.iteye.com/blog/332819)看
LinkedHashSet源码时,又想起这样的问题: 当父类实现了某一接口,子类还需不需显式地写出也实现这一接口。
例HashSet实现了Set接口, 那么子类LinkedHashSet还需不需要再写实现现了Set接口呢?跟大家一样,我的答案是:不再需要。
可看LinkedHashSet源码发现,它写出来了,如下所示:
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {
这是为什么呢? 是自己猜错了? 还是Sun错了?还是都对,那为什么还要让LinkedHashSet实现Set接口呢?
先用实验排除自己没错,为此,专门写了一个小例子,如附件所示。实验证明自己的猜想没错。
应该也不是Sun写错了, 现在类似这样的事多了,一直也没见JVM报错。
看来是都对了,那Java库的这样写法是出于什么目地? 用javadoc命令生成文档时方便?不至于吧, 用这个命令生成文档时所摘取的描述文字是手写的, 而不是从类的实现/继承关键字来抽取信息的.
还有什么原因呢?
想想......
上面提到用javadoc命令时说法不错, 不过生成的文档里不仅仅有对类的描述信息, 它还有如图所示的继承实现信息:
javadoc命令为了收集继承信息肯定得要迭代遍历了,不过为了收集接口实现信息若遍历的话,运算量相当地大,于是Sun就偷懒了: 实现javadoc时没有写那么的遍历,为了得到实现接口信息就只能由程序员在写代码时加上那些必要的接口。
于是写到这里,我“大胆”地得出如下猜想:
1. 只要父类实现了某个接口, 子类就不再显式地写,JVM不会报错,这个实验已验证。
2, Java标准库里这样写是由于生成JavaDoc文档的考虑, 这个还有没有得到验证。
分享到:
相关推荐
java的优势? 1:跨平台(平台:指的是操作系统) ... 1:在设置环境变量的时候 最少需要设置几个环境变量? 0个 2:在设置环境变量的时候 通常需要设置几个环境变量? 1个 -》 PATH -> jdk/bin
corejava接口学习总结.pdfcorejava接口学习总结.pdfcorejava接口学习总结.pdfcorejava接口学习总结.pdfcorejava接口学习总结.pdfcorejava接口学习总结.pdfcorejava接口学习总结.pdf
Core Java MS Word版
Core Java Professional For First Time Learner's(2nd) 英文mobi 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除
NULL 博文链接:https://jnh.iteye.com/blog/1300193
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 10 CoreJava DAY03 数组 20 CoreJava DAY04 27 CoreJava DAY05 面向对象 31 CoreJava DAY06 类的加载过程、实例化、继承、多态 37 CoreJava DAY07修饰...
Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】内附资源: Core Java. Volume I. Fundamentals, 8th Edition.pdf ; Core Java. Volume II. Advanced Features, 8th Edition.chm ; Core Java 8th ...
java\CoreJava笔记\CoreJAVA_day01.doc 学习 借鉴
java\CoreJava笔记\CoreJava_day06.doc
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 6 CoreJava DAY03 数组 11 CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰...
CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分CoreJava高级部分
java\CoreJava笔记\CoreJava_day11.doc
CoreJava CoreJava CoreJava 基础学习
core java 1&2 上下两册 英文版
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...
CoreJava核心 源码CoreJava核心 源码CoreJava核心 源码CoreJava核心 源码CoreJava核心 源码
Core Java for the Impatient 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
CoreJava新手笔记(全)CoreJava新手笔记(全)CoreJava新手笔记(全)CoreJava新手笔记(全)CoreJava新手笔记(全)CoreJava新手笔记(全)CoreJava新手笔记(全)
The release of Java SE 8 introduced significant enhancements that impact the Core Java technologies and APIs at the heart of the Java platform. Many old Java idioms are no longer required and new ...