枚举类

          先用普通类模仿一下枚举,

       采用抽象方法nextDay()将大量的if   else语句转移成了一个个独立的类

       如果想在一个类中编写完各个枚举类和测试调用类,那么就可以将枚举类定义成调用类的内部类 

测试类WeekDay

<span style="color:#333399;"><span style="color:#333399;">package cn.itcast.day1;

public abstract class WeekDay {

	private WeekDay(){}
	
	public final static WeekDay SUN=new WeekDay(){
		//内部类:是WeekDay的子类
		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}  
		
		
	};
	public final static WeekDay MON=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public final static WeekDay TUES=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return TUES;
		}
		
	};
	public final static WeekDay WED=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return WED;
		}
		
	};
	public final static WeekDay THUR=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return THUR;
		}
		
	};
	public final static WeekDay FRI=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return FRI;
		}
		
	};
	public final static WeekDay SAT=new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return SAT;
		}
		
	};
	
	public abstract WeekDay nextDay();
	
	/*public WeekDay nextDay(){
		if(this==SUN){
			return MON;
		}else{
			return TUES;
		}
	}*/
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
	
}</span></span>

类EumTest

<span style="font-size:24px;"><span style="font-size:24px;">package cn.itcast.day1;

public class EnumTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        WeekDay weekDay=WeekDay.MON;
        // int weekDay=0;   //通常把星期天用0表示
		
        System.out.println(weekDay.nextDay());
	}

}</span></span>

带有构造方法,抽象方法的枚举

<span style="font-size:24px;"><span style="font-size:24px;">package cn.itcast.day1;

public class EnumTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       /* WeekDay1 weekDay=WeekDay1.MON;
        //int weekDay=0;   //通常把星期天用0表示
		
        System.out.println(weekDay.nextDay());*/
        
        WeekDay weekDay2=WeekDay.WED;
        System.out.println(weekDay2);
        System.out.println(weekDay2.name());
        System.out.println(weekDay2.ordinal());
        System.out.println(WeekDay.values().length);
        System.out.println(WeekDay.valueOf("SUN").toString());
        
        //new Date(300){};
        TrafficLamp red=TrafficLamp.RED;
        System.out.println(red.nextLamp());
	}
    public enum WeekDay{
    	
    	SUN(10),MON,TUE,WED,THI,FRI,SAT,YAN;
    	/*枚举的构造方法必须位于参数列表后面,并且必须是private类型的,
    	上面定义了2个构造方法,一个带参数,一个不带参数。
    	默认情况下执行的是不带参数的,如果想执行带参数的,
    	可以再上面的某个参数后面带一个参数,例如SUN(1),
    	其中MON()没带参数,依然执行第一个构造方法。*/
    	private WeekDay(){System.out.println("first");}
    	private WeekDay(int day){System.out.println("second");}
    }
    public enum TrafficLamp{
    	RED(30){
    			public TrafficLamp nextLamp(){
    				//先前用public abstract TrafficLamp nextLamp()
    				//所以一直报错,没有找到原因
    				return GREEN;
    			}
        },
    	GREEN(50){
    			public  TrafficLamp nextLamp(){
    				return YELLOW;
    			}
        },
    	YELLOW(3){
    			public TrafficLamp nextLamp(){
    				return RED;
    			}
        };
    	public abstract TrafficLamp nextLamp();
    	private int time;
    	private TrafficLamp(int time){
    		this.time=time;
    	}
    }
}</span><span style="font-size: 32px;">
</span></span>

代码解释:YELLOW表示枚举中的一个对象。后面的大括弧表示此对象有TrafficLamp的子类去实现






</pre><pre name="code" class="java">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值