在平时的开发中,经常需要用到枚举,其实枚举enum 定义了一个特殊的类,这个类继承自java.lang.Enum,不过这是由编译程序处理的,直接写一个类继承Enum类会被编译程序拒绝。
来看一段代码:
public enum Action{
UP,RIGHT,DOWN,LEFT
}
在编译之后,会生成一个Action.class文件,反编译后,观察程序代码,就可以了解enum的本质内容:
public final class Action extends Enum{
private Action(String s,int i){
super(s,i);
}
public static final Action UP;
public static final Action RIGHT;
public static final Action DOWN;
public static final Action LEFT;
...
static{
UP = new Action("UP",0);
RIGHT = new Action("RIGHT",1);
DOWN = new Action("DOWN",2);
LEFT = new Action("LEFT",3);
}
}
可以看到,enum定义的Action实际上是个类,而enum中列举的UP,RIGHT,DOWN,LEFT常数,实际上是public static final
类型的,且为Action实例,由于构造函数权限为private所以你无法通过new来直接实例化Action,只有Action类中才可以实例化。