手动定义枚举类
public class Season {
//todo 2.定义静态常量属性,类型为自己
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();
//todo 1.私有化构造器
private Season(){}
public String toString(){
if(this == SPRING){
return "SPRING";
}else if(this == SUMMER){
return "SUMMER";
}else if(this == AUTUMN){
return "AUTUMN";
}else{
return "WINTER";
}
}
public static void main(String[] args) {
Season s = Season.SPRING;
System.out.println(s);
}
}
enum定义枚举类
public enum Season {
//它们实际上都是public static final修饰的常量对象。
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
Season s = Season.SPRING;
switch(s){
case SPRING:
System.out.println("春暖花开");break;
case SUMMER:
System.out.println("夏日炎炎");break;
case AUTUMN:
System.out.println("秋高气爽");break;
case WINTER:
System.out.println("白雪皑皑");break;
}
}
}
枚举的特别说明
(1)枚举中定义属性
- 枚举类对象的属性不应允许被改动, 所以应该使用
private final
修饰。不是语法要求,而是语义要求。 - 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
- 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
enum Week{
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日");
private final String DESCRPTION;
private Week(String dESCRPTION) {
DESCRPTION = dESCRPTION;
}
public String toString(){
return DESCRPTION;
}
}
(2)枚举类实现接口(了解)
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
interface Change{
void degenerate();
}
interface Checkable{
void check();
}
enum Gender implements Change,Checkable{
MAN{
public void degenerate(){
System.out.println("咔嚓一刀");
}
},WOMAN{
public void degenerate(){
System.out.println("比较复杂");
}
};
public void check(){
System.out.println("脱光");
}
}