枚举

来源:互联网 发布:js的document .ready 编辑:程序博客网 时间:2024/06/05 13:24

总结:

枚举就是一个类(比如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(){//覆盖toStringreturn 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()是一个类,没有名字,{}里面是类的内部@Overridepublic WeekDay nextDay(){return MON;}}public static final WeekDay MON = new WeekDay(){@Overridepublic 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{@Overridepublic WeekDay2 nextDay(){return null;}},MON{@Overridepublic WeekDay2 nextDay(){return null;}};public abstract WeekDay2 nextDay();}


0 0
原创粉丝点击