枚举
// Java enum MyColor{ RED("Hot", 4), BLUE("SAD",8); private String mood; public String getMood{ return mood; } private int index; public int getIndex(){ return index; } private MyColor(String mood, int index){ this.mood = mood; this.index = index; } } System.out.println(MyColor.RED.getMood());
小结:
1. 定义枚举类型本质上就是在定义带final修饰符的Enum<E>的子类;
2. 枚举值本质为第1点所定义的类的类常量;
3. 枚举值的ordinal值由其定义时的排序决定,并且在编译时已经被设置好了。
public enum MyColor{
RED, BLUE(){
@Override
public boolean getFlag(){
return false;
}
};
public boolean getFlag(){
return true;
}
}
// 调用
System.out.println(MyColor.RED.getFlag()); // 显示true
System.out.println(MyColor.BLUE.getFlag()); // 显示false
可以看到枚举值RED和BLUE同一个方法具有不同的行为。其实这是通过匿名内部类的方式实现的,BLUE的类型为MyColor$1 extends MyColor,而RED的类型为MyColor。
使用接口组织枚举
public interface Food { enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO } enum Dessert implements Food { FRUIT, CAKE, GELATO } }