gpt4 book ai didi

java - 是什么让 Enum 类不可继承?

转载 作者:行者123 更新时间:2023-12-02 10:59:47 25 4
gpt4 key购买 nike

我一直在看the source code of the Enum class .对我来说,这似乎是一个带有 protected 构造函数的普通抽象类。它不是最终的,它里面没有任何特殊的注释,也没有使用 native 代码。然而,它不能直接被子类化。实际上,以下代码无法编译:

class Foo<E extends Enum<E>> extends Enum<E> {
Foo(String name, int ordinal) {
super(name, ordinal);
}
}

我知道 Enum是 Java 中的一个特殊类,我知道应该禁止直接子类化是有充分理由的。但从技术上讲,你如何强制执行这种行为?
程序员是否可以创建一个类似的非最终类,尽管有一个可访问的构造函数,但它不允许直接子类化?

最佳答案

仅扩展 Enum 无效直接在语言中。任何时候您声明 enum ,这确实创建了 Enum 的子类.

JLS 阻止您“手动”声明扩展 Enum 的类的方式只是明确禁止它。来自 JLS section 8.1.4 :

It is a compile-time error if the ClassType names the class Enum or any invocation of it.



(其中 ClassType 是您要扩展的类型。)

如果没有该规则,您的代码将完全有效。

关于java - 是什么让 Enum 类不可继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com