看Oracle's documentation,Java中有3个层次结构
1.类层次结构
1.接口层次结构
1.枚举层次结构
有人能解释一下每个层次代表什么,它们的意义是什么吗?
一个小问题-
据记载
HashMap是Map接口的基于哈希表的实现
如Oracle website中所述,HashTable & HashMap福尔斯 * 类层次结构 *,而Map属于 * 接口层次结构 *,那么为什么HashMap、Hashtable和Map不在同一层次结构下表示?
看Oracle's documentation,Java中有3个层次结构
1.类层次结构
1.接口层次结构
1.枚举层次结构
有人能解释一下每个层次代表什么,它们的意义是什么吗?
一个小问题-
据记载
HashMap是Map接口的基于哈希表的实现
如Oracle website中所述,HashTable & HashMap福尔斯 * 类层次结构 *,而Map属于 * 接口层次结构 *,那么为什么HashMap、Hashtable和Map不在同一层次结构下表示?
3条答案
按热度按时间vm0i2vca1#
原则上,您可以在一个层次结构中显示所有Java类型。但是接口支持多重继承,因此一个树不足以显示层次结构。Javadoc通过多次显示受影响的条目(如果它们有多个不相关的祖先)来解决此问题。
但是分离接口和普通类可以大大减少对多个条目的需求。现在,最多在“Interfaces”部分需要它。在
java.util
包的情况下,根本不需要它,但是如果我们合并这些部分,就需要它,因为那样的话,ArrayList
和Vector
就需要显示为AbstractList
和RandomAccess
的子类型。例如。然而,它们不需要显示为
List
的子类型,因为它们的超类型AbstractList
已经是List
的子类型。同样,HashMap
不需要显示为Map
的子类型,因为它的超类型AbstractMap
已经实现了Map
。另一方面,如果合并了类型树,它的条目将需要被复制以显示在Serializable
和Cloneable
下,这显示了这样一个庞大的类型树是多么的分散注意力。enum
和注解类型可能被放置到不同的部分中,以与class
和interface
的分离一致,因为它们也是用不同的语法声明的,即enum
和@interface
。或者因为它们实际上并不像其他类型那样创建层次结构。它们总是具有相同的父类型,而没有API文档中会出现的子类型。另一方面,您可以对record
类型说同样的话,但从JDK 17开始,它们不会出现在一个不同的部分。但这可能只是一个疏忽,因为record
是一个新特性。ijnw1ujt2#
你提到的每一件事都是不同的。一个
class
,interface
和enum
相互作用,但又是不同的。被引用的层次结构是这些东西如何从父对象继承的。在Java中,
interface
定义了一组可以有多个实现的API。在case引用中,Map
是一组应该在所有实现上可用的方法。HashTable
和HashMap
对该接口有不同的实现-每一种都有其优缺点。最佳做法是使用界面宣告变数,而且当您将在执行严修化对象时指定特定实作时,使用程式码应该会注意该实作是什麽。
busg9geu3#
接口层次意味着有一个基类(一个接口),你可以实现你自己的类。那些实现的类必须有与基类相同的方法覆盖。
类层次结构意味着还有一个基类,你可以扩展你自己的类。这些类将产生与基类相同的行为。
它们之间的区别是你必须用给定的参数实现一个接口的方法,但是你的子类中已经有了基类的方法。这对于你必须用复杂的继承等方式编码的更大的项目很有用。
举个例子: