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/

原文地址:https://www.cnblogs.com/blachie/p/3654006.html