for java beginner 5-2 - 自己实现枚举-下

for java beginner 5-2 - 自己实现枚举-下

刚刚不是说了会有N多 IF ELSE
现在把他们弄掉


--------------
package com.ncs;

//眼睛大一点,这不是"类",是我写的枚举
//★2 变了
public abstract class Weekday {
	
	//别的地方就不要new了,只有我自己可以new
	private Weekday(){}
	
	
	//----------------------------------new 
	//刚刚说了N多 if else不是我们要的, 我们要thinking .....
	//想想能不能把每个 对象 的 nextday()方法 由他们 自己去实现 ,而不是一个 '大类' 全部完成
	// 可以, JAVA思想里有 抽象 方法, 抽象方法就是需要每个 '子类' 自己去实现 的
	//★1写了这个 抽象 方法后 上面的类就要变了
	public abstract Weekday nextDay();
	//====================================new 
	
	
	//然后 自己 可以包含很多个 自己
	//这只是演示而已,不弄7 个了,省得等下N多 if else
	//实现里不会自己去写ENUM的,也不会让你写的
	//★3 然后这里也变了,怎么可以去new 一个 抽象 类呢
	// 我们可以去new 抽象 类的子类
	/* ============下面两行不行了,换了
	public static final Weekday SUN = new Weekday(); 
	public static final Weekday MON = new Weekday();
	*/
	
	public static final Weekday SUN = new Weekday() {
		//★★传说里的 匿名 类 出现了 ,也就多了一对{}
		// 可以按 修复 键会提示你 实现方法的
		@Override
		public Weekday nextDay() {
			// TODO Auto-generated method stub
			// 有限个,知道了 SUN,那就返回 MON
			return MON;
		}
	};
	
	
	public static final Weekday MON = new Weekday() {
		//★★传说里的 匿名 类 出现了 ,也就多了一对{}
		// 可以按 修复 键会提示你 实现方法的
		@Override
		public Weekday nextDay() {
			// TODO Auto-generated method stub
			// 有限个,知道了 MON,那就返回 SUN
			return SUN;
		}
	};
	
	
	//好习惯来了,写了一个东西么,最好覆盖一下 toString() 
	public String toString() {
		return this==SUN?"SUN":"MON";
		//只有两个就偷偷懒吧
		//如果写全7个,这里就要长了 N多 if else
		//这里 有了 内部类就不需要了N多 if else
	}
}

------------------------------------------------
枚举换这个方法实现,其他什么都不变,还是可以运行正确的,非常正确!!
采用 抽象方法定义nextDay()就将 巨量的 if else 转移为 一个个独立的类

你可能感兴趣的:(java,sun)