An enum type is a special data type that enables for a variable to be a set of predefined constants.
相同点
- 枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器。
不同点
枚举的构造方法私有,构造器只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用。也就是说枚举类不给外界实例化的机会,只能它自己实例化,而一个枚举类的所有实例就只有枚举前面分号前的那几个,其他地方不允许创建。
-
枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。列出这些实例(枚举值)时,系统会自动添加 public static final 修饰,无需程序员显式添加。
关于以上两点的一个例子:
public enum Color {
GREEN,RED,BLUE,GRAY;
}
如果翻译为普通类大致为:
public class Color {
public static final Color GREEN = new Color(),
RED = new Color(),
BLUE = new Color(),
GRAY = new Color();
private Color() {
}
}
- 枚举允许为其定义抽象方法,如果枚举里声明一个抽象方法,前面的每个实例就必须要实现该方法。注意abstract关键字对于枚举类来说是不需要的。
public enum Color {
GREEN {
@Override
void draw() {
}
},RED {
@Override
void draw() {
}
},BLUE {
@Override
void draw() {
}
},GRAY {
@Override
void draw() {
}
};
abstract void draw();
}
- 所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。但枚举可以实现接口。
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
private String name;
private int index;
// 构造方法
Color(String name, int index) {
this.name = name;
this.index = index;
}
@Override
public void print() {
System.out.println(this.index + ":" + this.name);
}
@Override
public String getInfo() {
return this.name;
}
}