public enum Color { RED() { @Override public Color getNextColor() { return YELLOW; } }, YELLOW(){ @Override public Color getNextColor() { return BLUE; } }, BLUE(){ @Override public Color getNextColor() { return RED; } };
/** * 获取下一种颜色 * @return */ public abstract Color getNextColor(); }
1 2 3 4
Color yellow = Color.valueOf("YELLOW"); System.out.println(yellow.getNextColor());
// BLUE
枚举类的原理:
1 2 3 4 5 6 7 8 9
public enum Weekday { MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0);
public final class enums.Weekday extends java.lang.Enum<enums.Weekday> { public static final enums.Weekday MON; public static final enums.Weekday TUS; public static final enums.Weekday WED; public static final enums.Weekday THU; public static final enums.Weekday FRI; public static final enums.Weekday SAT; public static final enums.Weekday SUN; public static enums.Weekday[] values(); public static enums.Weekday valueOf(java.lang.String); static {}; }
是 final 类,不能被继承。
继承了 java.lang.Enum 类。只能实现接口了。
在Color枚举类中定义的 RED、、、本身是一个 Color对象的引用。Color RED = new Color(); 使用匿名内部类方式:
1 2 3 4 5 6 7
Color RED = new Color() { @override public Color getNextColor() { return YELLOW; } } 在枚举类中 只用写 RED(){...} JVM会完成其它操作
枚举类在switch中应用
1 2 3 4 5 6 7 8 9 10 11
switch (color) { case RED: color = Color.GREEN; break; case YELLOW: color = Color.RED; break; case GREEN: color = Color.YELLOW; break; }
枚举类实现接口
1 2 3 4
public interface Behaviour { void print(); String getInfo(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
public enum Weekday implements Behaviour{ MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0);