Enum继承解释不清楚?
Enum inheritance explanation is not clear?
所以根据 java docs
All enums implicitly extend java.lang.Enum. Because a class can only extend one parent, the Java language does not support multiple inheritance of state, and therefore an enum cannot extend anything else.
但是在java中我们还知道:-
All classes in Java extend java.lang.Object class implicitly
但是我们显然可以在java中扩展类。由于我们扩展的 class 本身是从 Object
扩展的(因此它不会导致多重继承,或者将其声明为:- 如果您不扩展任何其他 class 从 [=10 扩展=] else extend from class XYZ
extend from Object
)
对于枚举不能扩展其他 classes/enums 等这一事实,java 文档的解释是否不正确?
我是不是漏掉了一些愚蠢的观点?
它只是意味着你不能让你的枚举扩展任何东西,除了隐式扩展Enum
。
当它说Java不允许扩展多个class时,这意味着你不能
.--------. .----------.
| Enum | | YourBase |
'--------' '----------'
^ ^
\ /
\ /
.----------.
| YourEnum |
'----------'
另一方面,这完全没问题:
.--------.
| Object |
'--------'
^
|
.--------.
| Enum |
'--------'
^
|
.----------.
| YourEnum |
'----------'
当文档说
All classes in Java extend java.lang.Object class implicitly
它只是意味着每个 class 要么直接扩展 Object,要么通过它的超类间接扩展 Object class。
运行这个代码,你会得到答案:
System.out.println(MyEnum.class.getSuperclass());
System.out.println(MyEnum.class.getSuperclass().getSuperclass());
public enum MyEnum {
}
输出:
class java.lang.Enum
class java.lang.Object
最重要的是,考虑 Java 中不允许多重继承。 IE。 MyEnum
已经扩展了 Enum
而 Enum
已经扩展了 Object
。此链中没有任何其他扩展的空间。
所以根据 java docs
All enums implicitly extend java.lang.Enum. Because a class can only extend one parent, the Java language does not support multiple inheritance of state, and therefore an enum cannot extend anything else.
但是在java中我们还知道:-
All classes in Java extend java.lang.Object class implicitly
但是我们显然可以在java中扩展类。由于我们扩展的 class 本身是从 Object
扩展的(因此它不会导致多重继承,或者将其声明为:- 如果您不扩展任何其他 class 从 [=10 扩展=] else extend from class XYZ
extend from Object
)
对于枚举不能扩展其他 classes/enums 等这一事实,java 文档的解释是否不正确?
我是不是漏掉了一些愚蠢的观点?
它只是意味着你不能让你的枚举扩展任何东西,除了隐式扩展Enum
。
当它说Java不允许扩展多个class时,这意味着你不能
.--------. .----------.
| Enum | | YourBase |
'--------' '----------'
^ ^
\ /
\ /
.----------.
| YourEnum |
'----------'
另一方面,这完全没问题:
.--------.
| Object |
'--------'
^
|
.--------.
| Enum |
'--------'
^
|
.----------.
| YourEnum |
'----------'
当文档说
All classes in Java extend java.lang.Object class implicitly
它只是意味着每个 class 要么直接扩展 Object,要么通过它的超类间接扩展 Object class。
运行这个代码,你会得到答案:
System.out.println(MyEnum.class.getSuperclass());
System.out.println(MyEnum.class.getSuperclass().getSuperclass());
public enum MyEnum {
}
输出:
class java.lang.Enum
class java.lang.Object
最重要的是,考虑 Java 中不允许多重继承。 IE。 MyEnum
已经扩展了 Enum
而 Enum
已经扩展了 Object
。此链中没有任何其他扩展的空间。