java 编程思想说枚举中不能有枚举,所以很遗憾地想要给枚举分组的话,就要上接口,比如:
public interface Animal { //这里 interface 改成 enum 是不可以的
enum Bird{
magpie,eagle;
}
enum mammal {
elephant,lion;
}
}
然而为什么不能?
枚举最终被编译为 public final class xxxxx extends Enum
,除了java.lang.Enum
占据了唯一一个继承的名额,使枚举不能再继承其它类外,可以将枚举看作一个普通的类。
那么这个类里,有
public final 的,继承 java.lang.Enum 的内部类,也没什么问题啊?
内部类 public,没什么问题。final,也没什么大不了。继承个父类,小意思。
那为什么不可以呢?
谢谢
1
noreplay 2020-03-17 12:48:39 +08:00 via Android
最终类不能继承吧。最终类被继承,你就可以通过重载等手段改变最终类的行为。那就和最终相悖了。
|
2
wysnylc 2020-03-17 13:31:18 +08:00
禁止套娃
|
3
Newyorkcity OP |
4
ChenFanlin 2020-03-17 14:29:00 +08:00 1
|
5
Newyorkcity OP @ChenFanlin wocao!谢谢你亲手写代码还截图!
|
6
ChenFanlin 2020-03-17 18:01:27 +08:00
|
7
Newyorkcity OP @ChenFanlin
java 编程思想第四版 19.7 使用接口组织枚举无法从 emm 继承子类有时很令人沮丧。这种需求有时源自我们希望扩展原 enum 中的元素,有时是因为我们希望使用子类将一个 enm 中的元素进行分组。 在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。举例来说,假设你想用 enm 来表示不同类别的食物,同时还希望每个 enum 元素仍然保持 Food 类型。那可以这样实现: 然后给出的代码里用了接口来实现。。。 |
8
noreplay 2020-03-17 19:20:08 +08:00 via Android
@Newyorkcity 审题不准确,贻笑大方了。
|