黑马程序员——枚举的原理及枚举构造方法调用,抽象方法实现等等介绍


                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                          

package j2se_develop;
/**
 * 枚举
 * 		JDK1.5新特性
 * 	枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
 * 	枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
 * 
 * @author zjw
 *
 */
public class Enumeration {
	public static void main(String[] args) {
//		Week fri = Week.FRI;
//		System.out.println(fri.nextDay()+",,,,,,,,,,"+fri.toString());
	
		WeekDay wd=WeekDay.Sat;
		System.out.println(wd);
		System.out.println(wd.name());//获取对象的名称
		System.out.println(wd.ordinal());//这个变量对应引用类型的排序位置,从0开始排的
		System.out.println(WeekDay.valueOf("Mon"));//根据字符串封装为对象
		for(WeekDay d:WeekDay.values()){//得到枚举类中的所有的枚举元素,并用增强for循环遍历
			System.out.println("------"+d.name());
		}
	
	}
	//运用java封装好的枚举
	/**
	 * 通过两种方式调用构造方法(两种方法),首先明确,默认调用的是无参的构造方法
	 * 1,通过在参数后面添加符合相应构造方法参数,如:Sun(1);这就实现了调用了那个有参数的构造方法,当然Sun();括号中什么不写代表调用无参构造方法,不过默认就是这样的
	 * 2,通过构造方法间的调用
	 * 
	 */
	public enum WeekDay{
		Sun,Mon,Tue,Wed,Thi,Fri,Sat;//如果只是这些参数,最后的分号可有可无;但如果下面还有其他的内容,如构造方法,就要加分号
		//上面的参数默认的调用的是无参构造方法,可以在参数后面指定调用哪个构造方法,如:Sun(1);这就是调用的有参数的构造方法,你懂的
		private WeekDay(){//构造方法要私有化
			this(1);//当然,通过构造方法之间的调用也是可以的啊
			//System.out.println("无参构造方法---------------");
		}
		private WeekDay(int day){//构造方法要私有化
			System.out.println("有参构造方法");
		}
	}
	/**
	 * 枚举类中有抽象方法
	 * 例子:交通灯,三种信号灯,红灯后是绿灯,绿灯后是黄灯,黄灯后是红灯
	 * 
	 * 如果枚举中只有一个参数,就可以作为一种单例的实现方式
	 */
	public enum TrafficLamp{
		//参数列表要写在第一行
		RED(30){
			public TrafficLamp nextLamp() {
				return GREEN;
			}
		},
		YELLOW(45){
			public TrafficLamp nextLamp() {
				return RED;
			}
		},
		GREEN(5){
			public TrafficLamp nextLamp() {
				return YELLOW;
			}
		};
		public abstract TrafficLamp nextLamp();
		private int time;//定义每个灯的时间
		private TrafficLamp(int time){//定义私有构造方法
			this.time=time;
		}
	
	}
}
/**
 * 模拟枚举原理
 * 
 * @author zjw
 *
 */
abstract class Week{
	private Week(){
	}
	//final和static的位置可以互换
	//此种方式使用抽象类来做的,枚举就是这样做的 
	public final static Week SUN=new Week(){
		public Week nextDay() {
			return MON;
		}
	};
	public final static Week MON=new Week(){
		public Week nextDay() {
			return TUE;
		}
	};
	public final static Week TUE=new Week(){
		public Week nextDay() {
			return WED;
		}
	};
	public final static Week WED=new Week(){
		public Week nextDay() {
			return THE;
		}
	};
	public final static Week THE=new Week(){
		public Week nextDay() {
			return FRI;
		}
	};
	public final static Week FRI=new Week(){
		public Week nextDay() {
			return SAT;
		}
	};
	public final static Week SAT=new Week(){
		public Week nextDay() {
			return SUN;
		}
	};
	
	public abstract Week nextDay();
	
//	//final和static的位置可以互换
//	public final static Week SUN=new Week();
//	public final static Week MON=new Week();
//	public final static Week TUE=new Week();
//	public final static Week WED=new Week();
//	public final static Week THE=new Week();
//	public final static Week FRI=new Week();
//	public final static Week SAT=new Week();
	
//	public Week nextDay(){
//		if(this==SUN){
//			return MON;
//		}else if(this==MON){
//			return TUE;
//		}else if(this==TUE){
//			return WED;
//		}else if(this==WED){
//			return THE;
//		}else if(this==THE){
//			return FRI;
//		}else if(this==FRI){
//			return SAT;
//		}else{
//			return SUN;
//		}
//	}

	public String toString(){
		String temp="";
		if(this==SUN){
			temp="SUN";
		}else if(this==MON){
			temp="MON";
		}else if(this==TUE){
			temp="SUN";
		}else if(this==WED){
			temp="WED";
		}else if(this==THE){
			temp="THE";
		}else if(this==FRI){
			temp="FRI";
		}else{
			temp="SAT";
		}
		return temp;
	}



}

                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                         详细请查看       http://edu.csdn.net/heima


你可能感兴趣的:(JavaSE提升)