案例:使用枚舉類型(enum)來定義Season類
public class enumTest {
public static void main(String[] args) {
//Season.SPRING 可以擷取一個Season對象
Season spring = Season.SPRING;
spring.showInfo();
//重複執行Season.SPRING 所擷取的Season對象都是同一個
//枚舉類中的每個枚舉都是單例模式的
Season spring1 = Season.SPRING;
System.out.println(spring1.equals(spring));
Season summer = Season.SUMMER;
summer.showInfo();
Season autumn = Season.AUTUMN;
autumn.showInfo();
Season winter = Season.WINTER;
winter.showInfo();
winter.test();
}
}
//枚舉類可以比較簡便地實作單例模式
enum Season implements ITest {
//此處相當于在調用私有的有參構造方法
SPRING("春天", "春暖花開"), //注:枚舉常量之間用逗号隔開
SUMMER("夏天", "炎炎夏日"),
AUTUMN("秋天", "秋高氣爽"),
WINTER("冬天", "寒風凜冽");
private Season(String name, String desc)
{
this.name = name;
this.desc = desc;
}
public void showInfo()
{
System.out.println(this.name + ": " + this.desc);
}
private final String name; //final修飾的成員變量變成了常量
private final String desc;
@Override
public void test() {
System.out.println("這是實作ITest接口的test方法");
}
}
interface ITest{
void test();
}
從案例可以總結出對枚舉類的用法:
- 枚舉類是一種特殊的類,因為已經繼承了枚舉類,是以不能再繼承其他類
- 枚舉類中的枚舉常量之間用逗号隔開
- 枚舉常量可以調用本類的構造方法,可以簡便地實作單例模式
- 通過枚舉類名.枚舉常量名可以擷取該類的一個對象,但是多次執行相同的枚舉類名.枚舉常量名所擷取的是同一個對象
- 枚舉類可以像普通類一樣去實作接口