【问题标题】:Java Enum can't extends other Enum, class canJava Enum不能扩展其他Enum,类可以
【发布时间】:2022-02-03 06:28:43
【问题描述】:

来自 Stackoverflow 的用户提出了这个问题,遗憾的是没有可以解释情况的答案。

Why enum can't extend another class while all other classes can

我也有同样的问题。 Java还告诉它是multiple extends并且不支持。 Java documentation.

但这部分让我很困惑。如果任何类默认扩展 Object 类(Java 中的 Main 类),并且任何新类都可以扩展另一个类(Object 类除外),但任何新 Enum 不能?为什么?

任何Enum都默认扩展Enum类,对于特殊的enum不能扩展更多的类,如果说是程序的方式,会更容易理解。但是在文档中写不能扩展,因为它是多个类。也许文档不正确?如果有人可以解释这部分,请解释一下。

谢谢!

【问题讨论】:

  • enum 基本上是一个编译时构造,它将创建一个扩展 java.lang.Enum 的类(这是由编译器添加的,因此您在代码中看不到它 - 很像将extends Object 添加到不扩展其他任何内容的任何类中)。这就是为什么你不能添加另一个extends

标签: java object enums


【解决方案1】:

正如您所链接问题的 cmets 所解释的那样,所有类都扩展 Object。

一个类:

class Foo { }

隐式扩展Object,但是一个类:

class Bar extends Foo { }

只是扩展Foo

它也是Object通过Foo的后代。

所以一个枚举隐含地扩展了Enum,并且不能扩展其他任何东西。

枚举是最终类,所以没有什么可以扩展它们。

【讨论】:

    【解决方案2】:

    从您链接的文档中:

    注意:所有枚举都隐式扩展 java.lang.Enum。因为一个类可以 只扩展一个父级(参见声明类),Java 语言会 不支持状态的多重继承(参见 Multiple Inheritance of 状态、实现和类型),因此枚举不能扩展 还有什么。

    基本上Enum 具有内置的编译器魔法,实际上编译器从java.lang.Enum 扩展了 Enum 类。 Java 不支持类的多重继承,因此您不能扩展 Enum。

    也可以从spec jls-8.9 看到这个。

    一个枚举类型是隐式最终的,除非它包含至少一个枚举 具有类主体的常量。

    显式声明枚举类型为编译时错误 最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2019-05-28
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多