为什么可以';枚举不能在Java中扩展类吗?
为什么不能让枚举在Java中扩展某些类 下面的例子表明:为什么可以';枚举不能在Java中扩展类吗?,java,enums,subclass,extends,Java,Enums,Subclass,Extends,为什么不能让枚举在Java中扩展某些类 下面的例子表明: 我们可以使用普通enumE1 我们可以使用“复杂”枚举E2 但是我们不能通过组合某个类并用enum扩展它来获得相同的复杂enum 例如: public class Try_ExtendEnum { public static enum E1 { North, East, South, West } public static enum E2 {
E1
E2
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
无法扩展另一个类,因为enum
已经扩展了enum
。该类提供了所有enum
功能
然而,枚举可以实现接口
:
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
值本质上是一个公共静态最终值
值,因此它的命名方式相同-在带下划线的块大写中
编辑
来自注释-如何覆盖单个enum
值中的方法。这通常用于工厂模式。假设我们有一个小部件
和一个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
上具有多态行为可能非常强大。根据,每个enum都是隐式最终的,是enum的一个子类。因此,一个枚举已经从另一个类继承,使其成为另一个类的子类将打破Java的单一继承范式。然而,枚举可以实现一个接口。@boristesspider可能用户2610529在回答问题时看不到您的答案,直到我发布了我的答案,我才看到您的答案。另外,非常有趣的是,如果需要,您可以分别覆盖每个枚举值的方法。@user2610529添加了一个这样的示例。噢,哇,我不知道Enum可以实现接口!我知道他们自己也可以有抽象的方法,我总是觉得很酷。所以谢谢你告诉我这个消息!实际上,我看到了一个论点,即enum不能扩展另一个类或enum,因为它们已经扩展了enum。这是我在Java中见过的愚蠢的论点。你觉得其他课程怎么样?为什么他们可以扩展其他类,即使他们已经扩展了对象类?@UnKnownObject
是特殊的-一切extendingobject
都作为单亲class
。所以Parent->Object
,如果我们添加一个子元素,那么child->Parent->Object
<代码>扩展对象
被添加到编译器未扩展另一个类
的任何类
。Java不支持多重继承。