`

CoreJava: 父子类都需要实现同一个接口?

阅读更多

    前些写用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文档的考虑, 这个还有没有得到验证。

分享到:
评论
1 楼 pstinghua 2009-02-20  
提高代码的可读性

相关推荐

    coreJava: serialVersionUID

    在Java中,实现序列化的类需要实现`java.io.Serializable`接口。然而,仅仅实现这个接口并不足以确保序列化和反序列化始终成功,因为类的结构可能会随时间发生变化,如增加、删除或修改字段。这就是`...

    corejava接口学习总结.pdf

    1. **多继承支持:** 在Java中,通过接口可以实现类的多重继承效果,这使得开发人员可以在不影响代码结构清晰度的前提下,让一个类同时具有多种功能。 2. **混合类型支持:** 接口可以用于定义不同类型的共同行为...

    corejava12示例代码

    《CoreJava12示例代码》是一份针对Java编程语言深度学习的重要资源,主要涵盖了CoreJava12版本中的核心概念和特性。这份压缩包文件包含了丰富的示例代码,旨在帮助开发者深入理解Java语言的各个方面,提升编程技能。...

    Core Java

    1. **类与对象**:类是面向对象编程的基础,是描述某一类事物共性的抽象,而对象是类的具体实例。类包含了属性(即对象的状态)和方法(对象的行为)。对象与类的关系类似于变量与数据类型的关联。 2. **类的特性**...

    corejava_面试题

    是的,一个".java"源文件中可以包含多个类,但只能有一个公共类(public class),并且该公共类的名称必须与文件名相同。其他非公共类的数量不限制,但它们不会被公开访问。 2. Java有没有goto? Java语言中不包含...

    学习笔记 java\CoreJava笔记\CoreJava_day11

    CoreJava_day11的学习笔记主要涵盖了集合框架,特别是关于List、Set和Map接口,以及ArrayList、Vector和LinkedList等具体实现类的知识点。 首先,集合框架是用来存放对象的对象,它提供了一组接口和类,使得我们...

    corejava基础重要知识点总结

    java的优势? 1:跨平台(平台:指的是操作系统) ... 1:在设置环境变量的时候 最少需要设置几个环境变量? 0个 2:在设置环境变量的时候 通常需要设置几个环境变量? 1个 -》 PATH -&gt; jdk/bin

    java\CoreJava笔记\CoreJAVA_day01

    在学习CoreJava时,我们需要掌握以下几个关键知识点: 1. **编程思想**: - 面向对象编程(Object-Oriented Programming, OOP):Java是一种纯面向对象的语言,一切皆为对象,理解类、对象、封装、继承、多态等...

    corejava,java核心编程

    - Java内置了对多线程的支持,可以通过实现Runnable接口或继承Thread类创建线程。线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法、Lock接口(如ReentrantLock)等。 5. **图形用户界面...

    CoreJava学习笔记

    多态是指一个接口可以被多个类实现,或一个类可以继承多个基类。 **静态变量、方法和类:** 1. 静态变量:在整个程序运行期间只存在一份。 2. 静态方法:可以直接通过类名调用。 3. 静态类:Java不支持直接定义...

    core java1&2

    《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...

    corejava开源包

    2. 多线程:Java的Thread类提供了多线程编程的支持,Runnable接口则是实现线程任务的一种方式。此外,synchronized关键字和Lock接口提供了线程同步的机制。 3. 网络编程:Socket和ServerSocket类用于网络通信,可以...

    Core Java面试重点知识总结

    - Java栈(Java Stack):每个线程都有一个独立的Java栈,用于保存线程的运行状态。栈以帧为单位进行压栈和出栈操作,每次方法调用都会创建一个新的帧。如果栈深度过大,可能会导致`StackOverflowError`。 - 程序...

    core java 卷1 pdf

    Java程序由类(class)组成,每个类都包含方法(method)。主程序入口点是`public static void main(String[] args)`方法。Java源代码以`.java`为扩展名,编译后生成`.class`字节码文件。 四、基本数据类型与变量 ...

    Java试题-CoreJava试题

    1. **关键字**:继承类使用`extends`,实现接口使用`implements`。 2. **线程状态**:线程的五种状态分别是新建、可运行、运行、阻塞和终止。 3. **监听窗口**:窗口监听使用`WindowListener`接口,通常使用抽象类`...

    学习笔记 java\CoreJava笔记\CoreJava_day12

    在Java编程语言中,SortedSet接口是Set接口的一个子接口,它添加了对集合元素排序的能力。SortedSet接口要求其实现类必须维护元素的排序顺序,这种顺序可以是元素的自然顺序(即元素自身可比较),也可以是通过提供...

    core java

    以上就是"Core Java"涵盖的一些核心知识点,这些是每个Java开发者都需要掌握的基础。在实际开发中,这些概念和技能会相互交织,构成复杂的系统。通过深入理解和实践,能够为编写高效、健壮的Java应用程序打下坚实...

Global site tag (gtag.js) - Google Analytics