扩展枚举

Sar*_*n M 3 java inheritance enums

public enum myEnum {    
VAL1(10), VAL2(20), VAL3("hai") {
        public Object getValue() {
            return this.strVal;
        }
        public String showMsg() {
            return "This is your msg!";
        }
    };
    String strVal;
    Integer intVal;
    public Object getValue() {
        return this.intVal;
    }
    private myEnum(int i) {
        this.intVal = new Integer(i);
    }
    private myEnum(String str) {
        this.strVal = str;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的枚举中,当我为VAL3添加一个常量特定的类体时会发生什么?

VAL3的类型绝对是myEnum的子类型,因为它有重载和其他方法.(类类型来自'myEnum $ 1')

但是编译器如何创建一个扩展myEnum的子类型枚举,因为所有枚举都已经扩展了java.lang.enum?

Cra*_*lin 5

您的类myEnum继承自java.lang.Enum.VAL3是一个匿名内部类,它继承自myEnum,名为myEnum $ 1.将enum关键字视为合成糖.它为您设置具有普通继承树的类,但不允许您直接扩展java.lang.Enum或myEnum.