这是我想要实现的,我有一个类,它有一个包含一些值的枚举,我想对它进行子类化,并向枚举中添加更多的值。这是一个不好的例子,但是:
public class Digits
{
public enum Digit
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
}
}
public class HexDigits extends Digits
{
public enum Digit
{
A, B, C, D, E, F
}
}
因此HexDigits.Digit包含所有十六进制数字。这有可能吗?
发布于 2010-04-15 10:00:26
不不可能。您可以做的最好的事情是使两个枚举实现和接口,然后使用该接口代替枚举。所以:
interface Digit {
int getValue();
}
enum Decimal implements Digit {
ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE;
private final int value;
Decimal() {
value = ordinal();
}
@Override
public int getValue() {
return value;
}
}
enum Hex implements Digit {
A, B, C, D, E, F;
private final int value;
Hex() {
value = 10 + ordinal();
}
@Override
public int getValue() {
return value;
}
}
发布于 2010-04-15 10:01:39
不是的。
枚举不能被子类化。
这里的理由是枚举定义了固定数量的值。子类化将打破这一点。
发布于 2017-12-17 20:36:20
这不可能。这是有原因的。想象一下,你可以扩展一个枚举:
enum A { ONE, TWO }
enum B extends A { THREE } // for a total { ONE, TWO, THREE }
现在你可以这样做了:
B b = B.THREE
A a = b // a = B.THREE ?
但是对于A
,B.THREE
不是一个有效的选项。
当然,你也可以让它们不是多态的,但这并不是真正的扩展。
https://stackoverflow.com/questions/2642281
复制相似问题