package com.itheima;
public class EnumTest {
public static void main(String[] args){
WeekDay weekDay=WeekDay.MON;//
// System.out.println(weekDay.nextDay());
WeekDay weekDay2=WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());//FRI
System.out.println(weekDay2.ordinal());//自己排第几,从0开始,FRI为5
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);//将枚举的元素放进数组
}
/*
* 枚举相当于一个类,可以定义构造方法、成员变量、普通方法、抽象方法
* 枚举元素必须位于枚举体中最开始部分,其后用分号与其他成员分隔。
*/
public enum WeekDay{//枚举
SUN(1),MON,TUE,WED,THI,FRI,SAT;//MON和MON()效果一样,都是调用默认的构造方法
//构造方法,必须放在列表之后
private WeekDay(){
System.out.println("first");
}
private WeekDay(int day){
System.out.println("second");
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(40){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
/*
* 三个元素都是由子类写的,完成父类的抽象方法
* 每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方法进行定义
*/
public abstract TrafficLamp nextLamp();//抽象的next方法
private int time;
private TrafficLamp(int time){//表示时间的构造方法
this.time=time;
}
}
}
}
package com.itheima;
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN=new WeekDay(){
//用它的子类创建实例对象,内部类,没有名称,但是weekday的子类
//子类的具体代码
public WeekDay nextDay(){
return MON;
}
};
public final static WeekDay MON=new WeekDay(){
public WeekDay nextDay(){
return SUN;
}
};
public abstract WeekDay nextDay();//抽象
/* public WeekDay nextDay(){
if(this==SUN){
return MON;
}else{
return SUN;
}
}*/
public String toString(){
return this==SUN?"SUN":"MON";
}
}