enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法。经过查看源码发现它将自己的构造函数也私有化了,它在创建对象时,调用的是父类方法中的Enum的受保护构造器创建一个枚举对象。
Enum
protected Enum(String name,
int ordinal)单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码。
参数:
name - - 此枚举常量的名称,它是用来声明该常量的标识符。
ordinal - - 枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
那么我们都知道被私有化的构造函数,说明这个类不能让外部通过new的方式来创建,所以这时候它是不能被实例化。也就是说不能abstract修饰。
还有一个问题就是当我们在枚举类中定义了一个抽象方法,我们是需要使用枚举值来实现这个方法,是因为枚举值它的实现是通过调用私有的构造方法,在底层创建了对象,而这时候的枚举值就相当于= new 枚举(),那么因为它里边带有抽象方法,在我们创建对象时,是需要去实现这个构造方法,所以这时候就相当于new 枚举(){。。。。。。.//实现的过程}
enum Demo{
RED {
@Override
void show () {
// TODO Auto-generated method stub
}
},COL {
@Override
void show () {
// TODO Auto-generated method stub
}
};
abstract void show();
}
|