java枚举学习enum
java 1.5以后才出现enum的关键字
所有的enum类都继承自Enum类,所以enum类无法再继承其他的类,可以实现接口,枚举类出了不能被继承其余的与普通类的特性一致,
枚举类的构造函数只能自己类内使用
enum类在编译阶段,编译器会把其编译成普通的类,添加values与valueof静态方法
enum MM{YOU,ME}
javap 该类后结果如下
final class MM extends java.lang.Enum{ public static final MM YOU; public static final MM ME; static {}; public static MM[] values(); public static MM valueOf(java.lang.String); }
我们可以看的其变成了最终类所以不可以被继承,添加了values和valueof静态方法
看一个实现接口的例子
接口
public interface IMM { public void m(); }
枚举类
enum MM implements IMM { YOU("SD") { @Override public void m() { System.out.println("you"); } }, ME("fdsa"); MM(String a) { m = a; } private String m; public String getA() { return m; } @Override public void m() { System.out.println("main"); } }
java p 反编译后
class MM extends java.lang.Enum implements IMM{ public static final MM YOU; public static final MM ME; static {}; public java.lang.String getA(); public void m(); public static MM[] values(); public static MM valueOf(java.lang.String); MM(java.lang.String, int, java.lang.String, MM); }
但是重载的方法m,类是如何知道的呢
使用接口组织枚举,来解决无法从enum继承子类
在一个接口的内部创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。
public interface Food { enum dezzert implements Food { D, E, F; } enum water implements Food { W, R, T; } enum Appetize implements Food { A, B, C; } }
资料:
http://blog.jobbole.com/31597/