enum的一個疑問?(待解決)
阿新 • • 發佈:2018-05-19
sys nbsp com 使用 特點 一行 inf CA 遇到的問題
1、枚舉類介紹
如果一個類的實例是有限且確定的,那麽可以使用枚舉類。比如:季節類,只有春夏秋冬四個實例。
枚舉類使用enum進行創建,其實例必須從”第一行“開始顯示寫出。
enum Season{ SPRING,SUMMER,FALL,WINTER;//默認public static final,這都是Season類的對象。
}
特點:
1、枚舉類的對象默認都是public static final
2、枚舉類的構造器都是private,所以無法在外部創建其實例,這也決定了枚舉類實例的個數的確定性(寫了幾個就是幾個)。
3、enum類如果不是abstract的,就默認是final的
4、enum類默認extends java.lang.Enum,所以無法再繼承其他類
2、遇到的問題
enum類默認被final修飾的情況下,是無法有子類的。但是在《瘋狂Java講義》中是這麽說的:
那麽,問題來了:
enum Season{ // SPRING,SUMMER,FALL,WINTER;//默認public static final,這都是Season類的對象。 SPRING{ public void show(){ System.out.println("I‘m Spring"); } },SUMMER,FALL,WINTER; private String name; //構造器默認且只能是private Season(){ System.out.println("Season run...");//運行四次 } public void setName(){ //Java5開始,switch方法支持枚舉類對象。 switch(this){ case SPRING: name="春"; break; case SUMMER: name="夏"; break; case FALL: name="秋"; break; case WINTER: name="冬"; break; } } public void setName1(String name){ this.name=name; } public String getName(){ return name; } public void show(){ System.out.println("I‘m show"); } }
運行結果:
問題:SPRING是Season匿名子類的對象,但是前面已經說明Season類是final的。
enum的一個疑問?(待解決)