相同點(diǎn)
枚舉類是一種特殊的類,它和普通的類一樣,有自己的成員變量、成員方法、構(gòu)造器。
不同點(diǎn)
枚舉的構(gòu)造方法私有,構(gòu)造器只能使用 private 訪問修飾符,所以無法從外部調(diào)用構(gòu)造器,構(gòu)造器只在構(gòu)造枚舉值時(shí)被調(diào)用。也就是說枚舉類不給外界實(shí)例化的機(jī)會(huì),只能它自己實(shí)例化,而一個(gè)枚舉類的所有實(shí)例就只有枚舉前面分號(hào)前的那幾個(gè),其他地方不允許創(chuàng)建。
枚舉類的所有實(shí)例(枚舉值)必須在枚舉類的第一行顯式地列出,否則這個(gè)枚舉類將永遠(yuǎn)不能產(chǎn)生實(shí)例。列出這些實(shí)例(枚舉值)時(shí),系統(tǒng)會(huì)自動(dòng)添加 public static final 修飾,無需程序員顯式添加。
關(guān)于以上兩點(diǎn)的一個(gè)例子
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() { } }
枚舉允許為其定義抽象方法,如果枚舉里聲明一個(gè)抽象方法,前面的每個(gè)實(shí)例就必須要實(shí)現(xiàn)該方法。注意abstract關(guān)鍵字對(duì)于枚舉類來說是不需要的。
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; } } }