java5新特性枚举类型

一、模拟枚举的实现原理之交通灯

     1、定义一个抽象的类TrafficLamp.java

public abstract class TrafficLamp {
	private TrafficLamp(){};
               //定义一个让子类实现去的抽象方法
	public abstract TrafficLamp nextLamp();
	/*红灯,使用匿名类,消除了if语句**/
	public final static TrafficLamp RED = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return GREEN;
		}
	};
	/*绿灯**/
	public final static TrafficLamp GREEN = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return YELLOW;
		}
	};
	/*黄灯**/
	public final static TrafficLamp YELLOW = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return RED;
		}
	};
                /**为了方便打印,重写toString方法*/
	@Override
	public String toString() {
		String retVal;
		if(this==RED){
			retVal= "RED";
		}else if(this==GREEN){
			retVal = "GREEN";
		}else{
			retVal="YELLOW";
		}
		return retVal;
	};
}

 

    2、测试类TrafficLampTest.java

public class TrafficLampTest {
	public static void main(String[] args) {
		TrafficLamp lamp1 = TrafficLamp.GREEN;
		TrafficLamp lamp2 = TrafficLamp.RED;
		TrafficLamp lamp3 = TrafficLamp.YELLOW;
		System.out.println(lamp1.nextLamp());
		System.out.println(lamp2.nextLamp());
		System.out.println(lamp3.nextLamp());
	}

}

 

 

二、枚举的基本使用之交通灯

   1、定义一个抽象的类TrafficLamp.java

public enum TrafficLamp {
	RED(30){
		public TrafficLamp nextLamp(){return GREEN;}
		},
	GREEN(45){
		public TrafficLamp nextLamp(){return YELLOW;}
		},
	YELLOW(45){
		public TrafficLamp nextLamp(){return RED;}
		};
	public abstract TrafficLamp nextLamp();//抽象方法让子类去实现
	private TrafficLamp() {}
	private int time;//灯亮的时间
	//只供内部调用构造方法
	private TrafficLamp(int time){this.time=time;}
	public int getTime() {
		return time;
	}
}

   2、测试类TrafficLampTest.java

public class TrafficLampTest {

	public static void main(String[] args) {
		TrafficLamp lamp1 = TrafficLamp.GREEN;
		System.out.println(lamp1);
		System.out.println(lamp1.name());
		System.out.println(lamp1.toString());
		System.out.println(lamp1.getTime());
		System.out.println(lamp1.nextLamp());
	}

}

 3、知识点剖析

    当使用"enum"义 枚举类型时,实质上定义出來的类型继承自java.lang.Enum 类型,而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance).他们都被预设为public final类型,所以您无法改变他们,他们也是 static 成員,所以您可以通过类型名称直接使用他们.

    既然继承了Enum类,所以就可以使用它里面的部分方法,如:name()方法 ,返回此枚举常量的名称.Enum类重写了toString方法,返回的也是枚举常量的名称.其他方法的使用也很简单,具体用法可参考api文档.

 

三、使用场合

 作用:某一种事物(对象)提前定义好一组规定的数据,保证填写值合法,不超出规定的数据范围之内.如:定义性别,用户类型等成员变量时,可以封装成一个枚举类型的成员变量,方便使用.

四、总结

 枚举类型是一种特殊的类,所以它里面也可以定义属性、方法。但构造方法一定要私有化!因为枚举类里面的成员都是static类型的,所以枚举类可以作为一种单例的实现方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值