总结:
枚举就是一个类(比如WeekDay),里面可以有构造方法(必须私有,见例子1,例子2),抽象方法(成员变量必须实现该抽象方法,以匿名内部类的形式,见例子3),成员方法,成员变量
十万个为什么???
为什么构造方法要私有:
私有以后,无法调用实例化对象,这样就限制了枚举里面的成员变量和成员方法静态才有效,通过OBJ.member访问成员变量的目的就达到了。
例子1--实现构造方法:
public enum EnumWeekDay {
SUN,//必须放在第一行;public static final EnumWeekDay SUN=new EnumWeekDay();
TUE(2);//public static final EnumWeekDay SUN=new EnumWeekDay(2);
private EnumWeekDay(){System.out.println("哈哈");}//必须私有
private EnumWeekDay(int day){System.out.println("2");}
}
//枚举里面的成员在类载入的时候就会初始化。
用普通类模拟枚举
代码:
public class WeekDay{
private WeekDay(){}
public static final WeekDay SUN = new WeekDay();//实例化自己;static静态;final最终;一个对象
public static final WeekDay MON = new WeekDay();
public WeekDay nextDay(){
return this==SUN?MON:SUN;
}
public String toString(){//覆盖toString
return this==SUN?"SUN":"MON";
}
}
//调用
WeekDay w = WeekDay.SUN;//WeekDay只能选择SUN,MON而且不能被实例化。类似枚举。
//高级写法
public abstract class WeekDay{//有抽象方法的一定是抽象类
private WeekDay(){}//构造函数私有化
public abstract WeekDay nextDay();
public static final WeekDay SUN = new WeekDay(){//new WeekDay()是一个类,没有名字,{}里面是类的内部
@Override
public WeekDay nextDay(){
return MON;
}
}
public static final WeekDay MON = new WeekDay(){
@Override
public WeekDay nextDay(){
return SUN;
}
}
public String toString(){
return this==SUN?"SUN":"MON";
}
}
枚举内部实现构造方法、抽象方法
例子2--实现构造方法:
package com.mxx.ex;
public enum EnumWeekDay {
SUN,//必须放在第一行;public static final EnumWeekDay SUN=new EnumWeekDay();
TUE(2);//public static final EnumWeekDay SUN=new EnumWeekDay(2);
private EnumWeekDay(){System.out.println("哈哈");}//必须私有
private EnumWeekDay(int day){System.out.println("2");}
}
//调用
//EnumWeekDay ew = EnumWeekDay.SUN;//会调用两次构造方法
例子3--枚举里面有抽象方法:
package com.mxx.ex;
public enum WeekDay2 {
SUN{
@Override
public WeekDay2 nextDay(){
return null;
}
},
MON{
@Override
public WeekDay2 nextDay(){
return null;
}
};
public abstract WeekDay2 nextDay();
}
本文深入探讨了Java中枚举的实现原理,包括构造方法的私有化、抽象方法的实现以及如何通过枚举来简化代码逻辑。通过具体代码示例,详细解释了枚举在Java中的应用方式及其实现细节。
1040

被折叠的 条评论
为什么被折叠?



