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(); //我是冬天
}
}
從這里可以看出,枚舉元素實際上可以看成枚舉類的子類。