package com.liujing;
public class EnumTest {
/**
* 枚举是一个类,里面的元素就是这个类的实例对象
*/
public static void main(String[] args) {
WeekDay w=WeekDay.MON;
//System.out.println(w.nextDay());
Week f=Week.FRI;
System.out.println(f);
System.out.println(f.ordinal());
System.out.println(f.getClass());
System.out.println(Week.valueOf("MON"));
System.out.println(Week.values().length);
System.out.println(TrafficLamp.GREEN.nextLamp());
System.out.println(TrafficLamp.RED.time);
}
public enum TrafficLamp{
RED(1) {//含有抽象方法的类需要用其子类(重写父类的抽象方法)来实例化化对象
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(2) {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(3){
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time=time;
}
}
public enum Week{
SUN(1),MON(),TUE,WED,THU,FRI,SAT;//在元素后面加括号表示实例化对象时调用的是哪个构造方法
private Week(){System.out.println("first");}
private Week(int i){
System.out.println("second");
}
}
}
abstract class WeekDay{//普通类实现枚举,枚举的构造方法必须是private的
private WeekDay(){};
public final static WeekDay SUN=new WeekDay(){
@Override
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON=new WeekDay(){
@Override
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this==MON?"MON":"SUN";
}
}