相同點
枚舉類是一種特殊的類,它和普通的類一樣,有自己的成員變量、成員方法、構(gòu)造器。
不同點
枚舉的構(gòu)造方法私有,構(gòu)造器只能使用 private 訪問修飾符,所以無法從外部調(diào)用構(gòu)造器,構(gòu)造器只在構(gòu)造枚舉值時被調(diào)用。也就是說枚舉類不給外界實例化的機(jī)會,只能它自己實例化,而一個枚舉類的所有實例就只有枚舉前面分號前的那幾個,其他地方不允許創(chuàng)建。
枚舉類的所有實例(枚舉值)必須在枚舉類的第一行顯式地列出,否則這個枚舉類將永遠(yuǎn)不能產(chǎn)生實例。列出這些實例(枚舉值)時,系統(tǒng)會自動添加 public static final 修飾,無需程序員顯式添加。
關(guān)于以上兩點的一個例子
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() {
}
}枚舉允許為其定義抽象方法,如果枚舉里聲明一個抽象方法,前面的每個實例就必須要實現(xiàn)該方法。注意abstract關(guān)鍵字對于枚舉類來說是不需要的。
public enum Color {
GREEN {
@Override
void draw() {
}
},RED {
@Override
void draw() {
}
},BLUE {
@Override
void draw() {
}
},GRAY {
@Override
void draw() {
}
};
abstract void draw();
}三、向枚舉中添加新方法
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構(gòu)造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
} }
}