enum修饰的类默认继承了Enum类,默认被static final修饰。因为Java不支持多继承,故枚举类不能继承其他类;因为该枚举默认被final修饰,所以枚举也不能被其他类继承。
枚举最简单的应用就是定义一组常量:
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
}
}
枚举中的元素默认被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()); //改变春天
}
}
枚举元素因为默认被public static final修饰,所以枚举元素一旦定义好是不能改变的,但是枚举元素后面的描述信息是可以改变的,以上的例子中,我们就把“春天”改变成了“改变春天”。
枚举元素中的构造器只能用private修饰,这是为了防止被外部调用构造器去创建对象而造成重复。
枚举元素中可以重写枚举定义中的方法
枚举定义中可以定义方法和抽象方法,在枚举元素中可以重写这些方法:
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("我是季节");
}
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(); //我是季节
Season.WINTER.say(); //我是冬天
}
}
从这里可以看出,枚举元素实际上可以看成枚举类的子类。