枚举继承解释不清楚?

时间:2015-03-25 10:28:04

标签: java enums

所以根据java docs

  

所有枚举都隐式扩展了java.lang.Enum。因为类只能扩展一个父类,所以Java语言不支持多重继承状态,因此枚举不能扩展其他内容。

但在java中我们也知道: -

  

Java中的所有类都隐式地扩展了java.lang.Object类

但我们显然可以在java中扩展Classes。由于我们扩展的类本身是从Object扩展的(因此它不会导致多重继承,或者将其声明为: - 如果不扩展Object的任何其他类扩展,则从类{{ 1}}从XYZ)延伸

对于Enums无法扩展其他类/枚举等事实,java文档的解释是否不正确?

我错过了一些愚蠢的观点吗?

2 个答案:

答案 0 :(得分:5)

这只是意味着不能让你的枚举扩展到隐式扩展Enum以外的任何其他内容。

当它说Java不允许扩展多个类时,就意味着你不能拥有

.--------.   .----------.
| Enum   |   | YourBase |
'--------'   '----------'
     ^            ^
      \          /
        \       /
       .----------.
       | YourEnum |
       '----------'

另一方面,这完全没问题:

.--------.
| Object |
'--------'
     ^
     |
.--------.
|  Enum  |
'--------'
     ^
     |
.----------.
| YourEnum |
'----------'

当文档说

  

Java中的所有类都隐式地扩展了java.lang.Object类

它只是意味着每个类可以直接扩展Object,也可以通过它的超类来间接扩展。

答案 1 :(得分:1)

运行此代码,您将得到答案:

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中不允许多重继承。即MyEnum已扩展Enum,而Enum已扩展Object。这条链中没有任何其他扩展空间。