在Java中,枚舉類型本質上其實就是一個類,枚舉中的常量都是該枚舉類型的實例。雖然枚舉類型有一些限制,比如不能再派生出子枚舉類型,不能調用構造函數,不過我們仍然可以在枚舉類型中定義構造函數、字段和方法,例如:
- enum Weekday {
- SUNDAY("SUN"),
- MONDAY("MON"),
- TUESDAY("TUE"),
- WEDNESDAY("WED"),
- THURSDAY("THU"),
- FRIDAY("FRI"),
- SATURDAY("SAT");
- private String abbr;
- public Weekday(String abbr) {
- this.abbr = abbr;
- }
- public getAbbreviation() {
- return abbr;
- }
- }
上面的代碼中,Weekday枚舉有一個構造函數,這個構造函數是不能通過new語句調用的,不過可以在聲明常量的時候進行調用,只要要常量後面加上括號並傳遞參數進去就可以了,這樣不同的常量對象都有了不同的屬性值,這個值存儲在字段abbr中。另外這個枚舉類型還定義了方法,在獲得了對某個常量的引用後,就可以調用它的getAbbreviation()方法。例如:
- System.out.println(Weekday.SUNDAY.getAbbreviation());
枚舉類型還有一個特殊的功能,就是在聲明常量的時候可以重寫枚舉中的方法,從而達到某種“多態”的效果,例如:
- public enum SomeEnum {
- CONST_A, CONST_B, CONST_C {
- public void someMethod() {
- System.out.println("another description");
- }
- };
- public void someMethod() {
- System.out.println("default description");
- }
- }
通過CONST_A和CONST_B調用someMethod()方法,屏幕上會打印 default description,而通過CONST_C調用someMethod()方法,則會打印 another description。