枚举

本文深入探讨了Java中枚举的实现原理,包括构造方法的私有化、抽象方法的实现以及如何通过枚举来简化代码逻辑。通过具体代码示例,详细解释了枚举在Java中的应用方式及其实现细节。

总结:

枚举就是一个类(比如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();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值