------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
用普通类模拟枚举,调用一周的某一天显示下一天
abstract class WeekDay{
private WeekDay(){} //构造方法私有化
public abstract WeekDay nextDay(); //定义返回下一天的抽象方法
//原型是public static final WeekDay MON=new WeekDay(),因为有构造方法,所以在new WeekDay(){}方法体里将抽象方法实现,当作
//子类的实现对象传给WeekDay MON
public static final WeekDay MON=new WeekDay(){
public WeekDay nextDay(){
return SUN; //返回MON的下一天SUN
}
};
public static final WeekDay SUN=new WeekDay(){
public WeekDay nextDay(){
return MON;
}
} ;
public String toString(){
return this==SUN?"SUN":"MON";
}
}
public class WeekDayTest{
public static void main(String[] args) {
WeekDay wd=WeekDay.SUN;
System.out.println(wd.nextDay()); //返回nextDay()并调用toString()输出结果
}
}
用枚举类完成以上代码:
public class WeekDayTest{
public static void main(String[] args) {
Weekday day=Weekday.SUN;
System.out.println(day.nextDay());
}
public enum Weekday{
SUN("星期日"){ //定义枚举类的元素并完成抽象方法nextDay()
public Weekday nextDay(){
return MON;
}
},MON("星期一"){
public Weekday nextDay(){
return SUN;
}
};
public abstract Weekday nextDay();
private String day;
private Weekday(String day){ //构造方法必须是私有的
this.day=day;
}
}
}
有关枚举类的一些说明:
1、枚举就相当于一个类,枚举里的每个元素相当于一个对象,在枚举类中元素列表必须在第一行,如果元素列表之后没有其他语句,“;”可以不加,反之必须加上。 枚举的构造方法必须是私有的,默认构造方法也是私有的。 只要用到了枚举类,枚举的静态代码就会执行,如无参构造方法
2、调用无参构造方法时元素后可以有( ),也可以没有( ) ,调用有参构造方法时则必须有( ),而且( )里的参数类型应与有参构造方法想对应
3、枚举类中如果有抽象方法,那么可以在元素的后面跟上{}实现抽象方法,以明确枚举类的元素是子类的实例对象。 这时枚举类的元素由有枚举类的一个子类实现的,实现代码在{}里,把{}里的代码看成子枚举类的匿名内部类
注:如果枚举中只有一个成员,那么就可以作为一种单列设计模式来用