1. 程式人生 > >enum的一個疑問?(待解決)

enum的一個疑問?(待解決)

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的一個疑問?(待解決)