gpt4 book ai didi

java - 为什么枚举不能扩展 Java 中的类?

转载 作者:搜寻专家 更新时间:2023-11-01 01:00:48 24 4
gpt4 key购买 nike

为什么不能让枚举扩展 Java 中的某些类?

下面的例子表明:

  1. 我们可以使用普通枚举 E1
  2. 我们可以有“复杂的”枚举E2
  3. 但是我们不能通过组合一些类并用枚举扩展它来获得相同的复杂枚举。

例如:

public class Try_ExtendEnum {

public static enum E1 {
North,
East,
South,
West
}

public static enum E2 {

North(0),
Eash(90),
South(180),
West(270);

private double degrees;

E2(double degrees) {
this.degrees = degrees;
}

public double getDegrees() {
return degrees;
}
}

public static class DegreesMeasure {

private double degrees;

public DegreesMeasure(double degrees) {
this.degrees = degrees;
}

public double getDegrees() {
return degrees;
}
}

public static enum E3 extends DegreesMeasure {
North(0),
Eash(90),
South(180),
West(270);

E3(double degrees) {
super(degrees);
}
}

public static void main(String[] args) {

DegreesMeasure dm = new DegreesMeasure(123);
E3 e = dm; // should not be possible, since E3 is a subclass and not obliged to hold superclass

DegreesMeasure dm2 = E3.Nort; // just holding "tagged" version of instance; see no any problem

}


}

最佳答案

enum不能 extends另一个类因为一个enum已经extends Enum<T> .该类提供所有 enum功能。

enum然而,可以 implements一个interface :

public interface DegreesMeasure {
double getDegrees();
}

public enum E3 implements DegreesMeasure {
NORTH(0),
EAST(90),
SOUTH(180),
WEST(270);

private final double degrees;

E3(double degrees) {
this.degress = degrees;
}

@Override
public double getDegrees() {
return degrees;
}
}

无论如何,这在您的情况下似乎更有意义。

此外,传统上,作为 enum value 本质上是一个 public static final value 它以相同的方式命名 - 在带下划线的大写字母中。

编辑

来自评论-如何覆盖个人的方法enum值。这通常用于工厂模式。假设我们有一个 Widget和一个 WidgetFactory .我们有两种不同的小部件类型,小型和大型。这些由类 SmallWidget 表示和 LargeWidget .

interface Widget {}

interface WidgetFactory {
Widget get();
}

class LargeWidget implements Widget {}

class SmallWidget implements Widget {}

现在我们可以实现 WidgetFactory作为enum因此:

enum WidgetFactoryImpl implements WidgetFactory {
SMALL {
@Override
public Widget get() {
return new SmallWidget();
}
},
LARGE {
@Override
public Widget get() {
return new LargeWidget();
}
};

}

通常在 enum 上具有多态行为可以非常强大。

关于java - 为什么枚举不能扩展 Java 中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24470895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com