1.枚举类可以实现一个或多个接口,用enum关键字定义枚举类,默认继承java.lang.Enum类,而不是继承Object类,其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。
2.枚举类的构造器只能用private访问控制符,不管是省略还是默认或者强制指定访问控制符,都必须是private。
3.枚举类的所有实例必须在类里显示列出,否则因为枚举类的构造器为private访问控制,而导致枚举类无法创建实例。这些实例默认public static final修饰,不需要显示添加。
4.所有枚举类都提供了一个values的方法,该方法可以方便的遍历所有枚举值。
5.实现接口的枚举类:
public interface GenderDesc{
void info();
}
public enum Gender implements GenderDesc{
MALE("nan"){
public void info(){
System.out.printlin("this is male");
}
},
FEMALE("nv"){
public void info(){
System.out.printlin("this is female");
}
};
}
上面MALE、FEMALE枚举值不是Gender的实例,而是Gender的匿名子类的实例,编译源码会生成Gender.class、Gender$1.class、Gender$2.class三个class文件,说明
MALE、FEMALE是Gender的匿名子类的实例。
6.包含抽象方法的枚举类:
public enum Operation{
PLUS{
public double eval(double x,double y){
return x+y;
}
},
MINUS{
public double eval(double x,double y){
return x-y;
}
},
TIMES{
public double eval(double x,double y){
return x*y;
}
},
DIVIDE{
public double eval(double x,double y){
return x/y;
}
};
public abstract double eval(doublex,double y);
}
编译上面源码生成5个class文件,其中包括Operation以及四个匿名内部子类的class文件
枚举类里定义抽象方法时,无需显示用abstract关键字将枚举类定义成抽象类,但定义每个枚举值时必须为所有抽象方法提供实现。