枚举类:类的对象必须是有限个,不重复的,确定的。比如星期类的对只能有星期一,星期二…星期日,季类的对象只能有春夏秋冬四个对象,当需要定义一组常量,应该用枚举类。
如何定义枚举类:
方式一:jdk5.0之前,自定义枚举类
方式二:jdk5.0时可以使用enum关键字定义枚举类
:
class Season{
//声明season的私有属性
private final String seasonName;
private final String seasonDesc;
//私有化构造器,防止外部创建随意创建Season对象
private Season(String seasonName , String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//创建四个Season对象
public static final Season SPRING = new Season("春天" ,"spring");
public static final Season SUMMER = new Season("夏天" ,"summer");
public static final Season AUTUMN = new Season("秋天" ,"autumn");
public static final Season WINNTER = new Season("冬天" ,"winnter");
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
public String toString() {
return "seasonName = "+seasonName+", seasonDesc = "+seasonDesc;
}
}
public class EnumTest_01 {
public static void main(String[] args) {
Season SPRING = Season.SPRING;
System.out.println(SPRING);
}
}
注意:
enum Season
//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
SPRING("春天" ,"春暖花开"),
SUMMER("夏天" ,"夏日炎炎"),
AUTUMN("秋天" ,"秋高气爽"),
WINNTER("冬天" ,"冰天雪地");
//声明season的私有属性
private final String seasonName;
private final String seasonDesc;
//私有化构造器,防止外部创建随意创建Season对象
private Season2(String seasonName , String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
public class EnumeTest_02 {
public static void main(String[] args) {
Season1 spring = Season1.SPRING;
System.out.println(spring);
//SPRING 默认的toString()打印的是对象的名字
System.out.println(spring.getClass().getSuperclass());
//class java.lang.Enum 定义的枚举类默认继承的是java.lang.Enum类
}
}
:这个方法与普通类实现接口完全一样。
为了便于阅读,我把冗长的封装方法,私有属性都删去了。
interface infor1{
void show();
}
enum Season2 implements infor1{
//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
SPRING("春天" ,"春暖花开"),
SUMMER("夏天" ,"夏日炎炎"),
AUTUMN("秋天" ,"秋高气爽"),
WINNTER("冬天" ,"冰天雪地");
public void show() {
System.out.println("调用show方法");
}
}
:如果需要每个枚举值在调用同一个方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式,从而让不同枚举值调用同一个方法时具有不同的行为方式。
interface infor{
void show();
}
enum Season1 implements infor{
//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
SPRING("春天" ,"春暖花开"){
public void show() {
System.out.println("春天在哪里");
}
},
SUMMER("夏天" ,"夏日炎炎"){
public void show() {
System.out.println("宁夏");
}
},
AUTUMN("秋天" ,"秋高气爽"){
public void show() {
System.out.println("秋天不回来");
}
},
WINNTER("冬天" ,"冰天雪地"){
public void show() {
System.out.println("大约在冬季");
}
};