具有反编译为抽象类的抽象方法的用户定义枚举不能由任何其他类扩展



当我知道枚举被反编译时,它们是最终的,因此不能由任何其他类扩展,但当添加任何抽象方法时,它会要求实现该方法,并将其反编译为抽象类,所以我的问题是,在这种情况下,它必须允许任何其他常规类扩展此用户定义的枚举。

以下是我为研究目的编写的代码。

  1. Vehicle.java

    public enum Vehicle
    {
    car("car"), Bike;
    private String value;
    Vehicle(String value) {
    this.value = value;
    }
    Vehicle() {
    }
    public String getValue() {
    return value;
    }
    public void setValue(String value) {
    this.value = value;
    }
    }
    

反编译为:

public final class Vehicle extends java.lang.Enum<Vehicle> {
public static final Vehicle car;
public static final Vehicle Bike;
public static Vehicle[] values();
public static Vehicle valueOf(java.lang.String);
public java.lang.String getValue();
public void setValue(java.lang.String);
static {};
}
  1. City.java

    public enum City {
    Nagpur("np") {
    @Override
    void show() {
    // TODO Auto-generated method stub
    }
    };
    abstract void show();
    private String value;
    City(String value) {
    this.value = value;
    }
    City() {
    }
    public String getValue() {
    return value;
    }
    public void setValue(String value) {
    this.value = value;
    }
    }
    

反编译为:

public abstract class City extends java.lang.Enum<City> {
public static final City Nagpur;
public static City[] values();
public static City valueOf(java.lang.String);
abstract void show();
public java.lang.String getValue();
public void setValue(java.lang.String);
City(java.lang.String, int, java.lang.String, City$1);
static {};
}

我试着使用正常的类来重新创建场景,这很好。下面是代码。

  1. Enum.java

    public abstract class Enum<T extends Enum<T>> {
    }
    

2.Vehicle.java

public abstract class Vehicle extends Enum<Vehicle> {
private String name;
Vehicle vehicle=new Vehicle() {
@Override
public void show() {
// TODO Auto-generated method stub
}
};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void show();
}

3.Car.java

public class Car extends Vehicle {
@Override
public void show() {
// TODO Auto-generated method stub
}
}

很抱歉代码太长,缩进不好,但我真的很困惑为什么用户定义的枚举即使在反编译为抽象类后也不能扩展。提前感谢您的帮助。

我们不能扩展这些枚举,因为它们的构造函数是私有的。

最新更新