- package enumtest;
- public class EnumDemo {
- /**
- * 关于枚举。
- * @param args
- */
- public static void main(String[] args) {
- System.out.println(enu.A.getClass());
- }
- }
- enum enu {
- A, B, C, D;
- }
- 输出:class enumtest.enu
复制代码 说明A是一个对象,它的字节码文件是class enumtest.enu,还有枚举enu定义在了class EnumDemo{}外,也就说明enu是一个类,enu会在像类一样加载,A,B,C,D是这个类的实例。- package enumtest;
- public class EnumDemo {
- /**
- * 关于枚举。
- *
- * @param args
- */
- public static void main(String[] args) {
- System.out.println(enu.A.getClass());
- System.out.println(enu.A.getClass().getSuperclass());
- }
- }
- enum enu {
- A {
- void method() {
- System.out.println("A");
- }
- },
- B {
- void method() {
- System.out.println("A");
- }
- },
- C {
- void method() {
- System.out.println("A");
- }
- },
- D {
- void method() {
- System.out.println("A");
- }
- };
- abstract void method();
- }
- 输出:class enumtest.enu$1
- class enumtest.enu
复制代码 既然enu是类,可以定义它为抽象类,那么它的实例就必须要实现它的抽象方法,但是抽象方法不能被实例化,那么A,B,C,D用匿名内部类来了个实例化。所以输出它的字节码类为class enumtest.enu$1,字节码的父类为 class enumtest.enu。总之,就把枚举 enu的成员看成它的实例就ok了,当enu是抽象时,成员看成enu子类的实例,只不过这个子类在其内部!偶了! |