通过自定义枚举类型再引出使用enum来定义枚举类型,使用enum来定义枚举简化了程序,并且提供了values()、valueOf()方法
一、 自定义枚举类型
二、
/*
* 自定义枚举:(季节类)
* 一、与常规定义类一样,定义季节类的属性(也要不可变),方法,
* 二、将构造器私有,并且通过构造器可以传入所有的属性,(方便后面创建对象)
* 三、创建枚举对象,对象也需要不可改变
* 与常规定义类的不同:一、在类中直接创建了对象
* 二、私有化构造方法
* 三、属性定义为不可变 ,创建的对象也不可变
* */
public class Season {
//属性
private final String name;//季节名称
private final String desc;//季节描述
private Season(String name,String desc){
this.name=name;
this.desc=desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
//创建枚举对象,权限为public
public static
final Season SPRING=new Season("春天","春暖花开");
public static
final Season SUMMER=new Season("夏天","夏日炎炎");
public static
final Season AUTUMN=new Season("秋天","秋高气爽");
public static
final Season WINTER=new Season("冬天","白雪皑皑");
}
三、 使用enum来定义枚举类型
通过上面的代码我们可以看到,在创建对象时代码大量重复,而使用enum后就优化了这一个问题,并且使用enum后对象必须放在类的前面,对象之间用逗号分隔,最后一个用分号
public enum Season {
//创建枚举对象
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","白雪皑皑");
//属性
private final String name;//季节名称
private final String desc;//季节描述
private Season(String name,String desc){
this.name=name;
this.desc=desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
四、 使用enum定义的常用方法(类方法),这些方法不需要我们去定义
1、 Season [] values();将枚举对象以数组的形式返回
2、 Season valueOf(String);返回对应的枚举对象,参数必须与对象名相对应
3、 T valueOf(Class<T>,String); 返回对应的枚举对象,参数必须与对象名相对应
五、 使用枚举类型实现接口
分两种情况:一、与其他的类实现方法一样,这样所有的枚举对象调用该方法实现的效果一直
二、所有的枚举对象都去实现该方法,这样每个对象调用该方法可以实现不同的效果,具体实现:(每个对象都要去实现)
interface Info{
void show();
}
public enum Season implements Info{
//创建枚举对象
SPRING("春天","春暖花开"){
public void show(){}
},
SUMMER("夏天","夏日炎炎"){
public void show(){}
},
AUTUMN("秋天","秋高气爽"){
public void show(){}
},
WINTER("冬天","白雪皑皑"){
public void show(){}
};