Java语言规范中是否允许类类型将自身作为超类型?
关于Java类型超类型包含自身的说明
你的推论完全正确,所有Java类型天然是自身的超类型,这个结论直接来自Java语言规范的定义推导:
某一类型的*超类型(supertypes)*通过对直接超类型关系(记为S >₁ T,定义见本节后续规则)进行自反和传递闭包运算得到。我们使用S :> T表示S和T之间存在超类型关系。
这里的核心是自反闭包的数学定义:对任意原关系R,它的自反闭包会自动补充所有(x, x)的关系,也就是定义域内的每一个元素都和自身存在闭包后的关系。
所以哪怕String的直接超类型列表不包含自身,只要对直接超类型关系做自反闭包运算,String :> String的关系就自动成立,不需要额外的规范条款单独说明。
接下来规范里定义*真超类型(proper supertype)*的目的,就是为了把「类型自身」这个特殊情况从超类型集合里排除:
若S :> T且S ≠ T,则S是T的真超类型(proper supertype),记为S > T。
你自定义的「非真超类型」概念是成立的,它就对应类型本身,是所有类型超类型集合中必然存在的一个元素。
举个实际的例子:String的完整超类型集合包含:
String本身(非真超类型)- 直接超类型:
Object、Serializable、CharSequence、Comparable<String>(高版本JDK还包含Constable、ConstantDesc) - 上述直接超类型的所有超类型(比如
Object的超类型只有它自身)
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

