Enums的继承

M. *_*eif -3 java enums java-8

据我了解,Java枚举不可扩展.所以我想知道为什么枚举不是最终的定义.只是为了确保我理解我在JLS 8中查看的所有内容并找到以下内容:

枚举声明是隐式最终的,除非它包含至少一个具有类主体的枚举常量(第8.9.1节).

这是否意味着我可以创建一个可扩展的枚举常量,例如,自己的方法声明,字段,静态或对象初始化程序?

到目前为止,我没有找到一种方法可以让我得出结论,即枚举可能总是隐含最终的.我哪里错了?

Jes*_*per 7

正如描述所说,枚举常量可以有自己的主体,其中重写了枚举本身中定义的方法.例如:

public enum ExampleEnum {

    ONE,

    TWO {
        @Override
        public void print() {
            System.out.println("Two");
        }
    };

    public void print() {
        System.out.println(name());
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,常量TWO具有自己的主体,并具有该print()方法的重写版本.

请注意,无法扩展enum枚举本身的外部.

  • 你甚至可以使print方法抽象化以强制每个枚举实现它(如果需要这样的话). (5认同)