Java枚舉詳解

enum修飾的類默認(rèn)繼承了Enum類,默認(rèn)被static final修飾。因為Java不支持多繼承,故枚舉類不能繼承其他類;因為該枚舉默認(rèn)被final修飾,所以枚舉也不能被其他類繼承。
枚舉最簡單的應(yīng)用就是定義一組常量:

package enemerated;
enum Season {
    SPRING, 
    SUMMER, 
    FALL, 
    WINTER
}

public class EnumClass {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);  //SPRING
        System.out.println(Season.SUMMER);  //SUMMER
        System.out.println(Season.FALL);  //FALL
        System.out.println(Season.WINTER);  //WINTER
    }
}

枚舉中的元素默認(rèn)被public static final修飾。實際上,在JDK1.5之前,我們定義常量都是:public static final ...,引入枚舉之后,我們就可以使用枚舉來替代以前常量定義的方式。

向枚舉中添加方法
package enemerated;
enum Season {
    SPRING(1, "春天"), 
    SUMMER(2, "夏天"), 
    FALL(3, "秋天"), 
    WINTER(4, "冬天");
    
    private int index;
    private String name;
    
    private Season(int index, String name) {
        this.index = index;
        this.name = name;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class EnumClass {
    public static void main(String[] args) {
        System.out.println(Season.SPRING.getName());  //春天
        Season.SPRING.setName("改變春天");
        System.out.println(Season.SPRING.getName());  //改變春天
    }
}

枚舉元素因為默認(rèn)被public static final修飾,所以枚舉元素一旦定義好是不能改變的,但是枚舉元素后面的描述信息是可以改變的,以上的例子中,我們就把“春天”改變成了“改變春天”。
枚舉元素中的構(gòu)造器只能用private修飾,這是為了防止被外部調(diào)用構(gòu)造器去創(chuàng)建對象而造成重復(fù)。

枚舉元素中可以重寫枚舉定義中的方法

枚舉定義中可以定義方法和抽象方法,在枚舉元素中可以重寫這些方法:

package enemerated;
enum Season {
    SPRING(1, "春天"){
        @Override
        protected void show() {
            
        }
    }, 
    SUMMER(2, "夏天") {
        @Override
        protected void show() {
            
        }
    }, 
    FALL(3, "秋天") {
        @Override
        protected void show() {
            
        }
    }, 
    WINTER(4, "冬天") {
        @Override
        protected void show() {
            
        }
        protected void say() {
            System.out.println("我是冬天");
        }
    };
    
    private int index;
    private String name;
    
    private Season(int index, String name) {
        this.index = index;
        this.name = name;
    }
    
    abstract protected void show();
    protected void say() {
        System.out.println("我是季節(jié)");
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class EnumClass2 {
    public static void main(String[] args) {
        Season.SPRING.say();  //我是季節(jié)
        Season.WINTER.say();  //我是冬天
    }
}

從這里可以看出,枚舉元素實際上可以看成枚舉類的子類。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 概念 enum 的全稱為 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 en...
    靜默虛空閱讀 8,567評論 1 18
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,288評論 0 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • 第19天·21天OH卡美顏瘦身課 #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字...
    ddcc56c54f79閱讀 218評論 0 0