本帖最后由 苑永志 于 2013-6-15 23:12 编辑
我估计楼主的意思是想问:枚举不能被继承,但是枚举中的元素却是枚举子类的实例,这是为什么呢?
其实张孝祥老师很详细的模拟过枚举的实现,代码如下:- public abstract class WeekDay {
- private String name;
-
- private WeekDay(){}
-
- public static final WeekDay SUN = new WeekDay1(){
- public WeekDay nextDay() {
- return MON;
- }
- };
- public static final WeekDay MON = new WeekDay1(){
- public WeekDay nextDay() {
- return SUN;
- }
- };
-
- public abstract WeekDay nextDay();
-
- @Override
- public String toString(){
- return this == SUN ? "SUN" : "MON";
- }
- }
复制代码 枚举就好比是这个抽象类WeekDay,虽然不能直接被实例化(因为构造方法是private的),但是在类内部是可以直接使用构造方法的。
静态属性定义为WeekDay内部类的一个实例。这里的WeekDay是可以被继承的。枚举不能被继承,是java语言规范中要求的,为了满足枚举的一系列特性。
希望能帮助到楼主。 |