Javaenum 类是一个特殊的类,它允许你创建一组常量值(也被称为枚举)。
enum 类在 Java 中被编译为final 类,所以你不能在你的代码中扩展一个enum 类:
enum Colors {
RED, BLUE;
}
enum NewColors extends Colors {}
// ERROR: Cannot inherit from enum 'Colors'
enum 类本身也是abstract class Enum 的扩展,所以你不能创建一个继承了enum 的class ,如下图所示:
class Levels {}
enum NewLevels extends Levels {}
// No extends clause allowed for enum
一个enum 类代表了一个完整的可能值的枚举,所以你不能扩展一个enum 类来为它添加新的可能值。
然而,你可以做的是创建一个单独的enum 类并在必要时使用它:
enum Colors {
RED, BLUE;
}
enum NewColors {
GREEN, YELLOW;
}
class Main {
public static void main(String[] args) {
System.out.println(Colors.RED);
System.out.println(NewColors.GREEN);
}
}
但是,如果你的enum 类型在类中定义了一些方法怎么办?共享enum 类方法的最好方法是创建一个定义这些方法的interface 。
例如,Colors 和NewColors 枚举都可以有一个共享的describeColor() 方法,如下图所示:
interface DescribeColor {
String describeColor();
}
enum Colors implements DescribeColor {
RED, BLUE;
@Override
public String describeColor() {
return "The color is " + this;
}
}
enum NewColors implements DescribeColor {
GREEN, YELLOW;
@Override
public String describeColor() {
return "The color is " + this;
}
}
class Main {
public static void main(String[] args) {
System.out.println(Colors.RED.describeColor());
System.out.println(NewColors.GREEN.describeColor());
}
}
通过在每个enum 类中提供一个describeColor() 方法的实现,你将能够从这些枚举中访问同一个方法。
在Java中,enum 继承是故意不使用的,因为一个枚举应该包含一个完整的可能值的列表。
也就是说,你仍然可以通过向一个enum 类实现一个或多个interface 类型来共享方法。