枚举相当于一个类,其中可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分。
枚举只有一个成员时,就可以作为一种单例的实现方式。
1、实现带有构造方法的枚举
比较两个枚举类型的值时,不需要调用equals,直接使用“==”即可。
可在枚举类型中添加一些构造器、方法 和域。构造器只在构造枚举常量的时候被调用。
public class EnumTest {
public static void main(String[] args)
{
int weekDay1 = 7;
WeekDay1 weekDay = WeekDay1.SUN;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(weekDay2.getClass());
System.out.println(weekDay2.valueOf("SUN").toString());
System.out.println(weekDay2.values().length);
}
public enum WeekDay{
SUN(2),MON(),TUE,WEN,THI,FRI,STU;
private WeekDay(){System.out.println("frist");}
private WeekDay(int day){System.out.println("second");}
}
}
2、实现带有抽象方法的枚举
抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象类:含有抽象方法的类就叫抽象类。
抽象类中的抽象方法必须被实现。
public class EnumTest {
public static void main(String[] args)
{
TrafficLamp trafficlamp = TrafficLamp.GREEN;
System.out.println(trafficlamp);
}
public enum WeekDay{
SUN( 0),MON(),TUE,WEN,THI,FRI,STU;
private WeekDay(){System.out.println("frist");}
private WeekDay(int day){System.out.println("second");}
}
public enum TrafficLamp
{
RED(30){
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5){
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
public int time;
private TrafficLamp (int time){this.time=time;}
}
}