關於枚舉的理解

package com.an.testenum;
/*
 * JDK1.5之後:
 * 聲明格式:
 * 【修飾符】 enum 枚舉類名{
 * 		常量對象列表(每一個對象之間使用,分割)
 * }
 * 
 * 要求:
 * 1、常量對象列表必須在首行
 * 2、如果常量對象列表後面還有其他的代碼,那麼需要在常量對象列表後面加;
 * 
 * 特點:
 * 1、枚舉類型也是類,只不過有點特殊
 * (1)聲明關鍵字是enum,替代原來class
 * (2)對象已經在枚舉類中創建好了,不能在外面創建了
 * (3)枚舉類型中可以聲明一個或重載的多個構造器,但是必須全部私有化
 * (4)這個類默認不是繼承Object,而是Object下面的java.lang.Enum類型
 * 
 * java.lang.Enum類型:這是所有 Java 語言枚舉類型的公共基本類。 
 * (1)toString()返回枚舉的常量名
 * (2)name():返回枚舉的常量名
 * (3)ordinal():返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數爲零)。
 * API中沒有,是編譯增加的
 * 枚舉類型[] values():返回所有的枚舉的常量對象
 * 枚舉對象  valueOf("枚舉常量名"):返回的是某個枚舉常量對象
 * 
 * Enum類型沒有無參構造,子類默認調用的是它的有參構造
 * 
 * 首行:
 * this(),this(實參列表)
 * super(),super(實參列表)
 * package 包名;
 * 枚舉的常量對象列表
 */

public class TestEnum5 {
	public static void main(String[] args) {
		Week1 mon = Week1.MONDAY;
		System.out.println(mon);//調用的toString方法  MONDAY:
		System.out.println(mon.name());//返回常量名  MONDAY
		System.out.println(mon.ordinal());//返回枚舉常量的序數  0
		
		
		Week1 sun = Week1.SUNDAY;
		System.out.println(sun);//星期天:放假
		System.out.println(sun.name());//SUNDAY
		System.out.println(sun.ordinal());//6
		
		Week1[] values = Week1.values();
		for (Week1 week1 : values) {
			System.out.println(week1);
			/*  MONDAY:
				TUESDAY:
				WEDNESDAY:
				THURSDAY:
				FRIDAY:
				SATURDAY:
				星期天:放假
			*/
		}
	}
}

enum Week1{
	MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY("星期天","放假");
	
	private String name;
	private String desc;
	
	private Week1(){
		this.name = name();
		this.desc = "";
	}
	
	private Week1(String name){
		this.name = name;
	}
	
	private Week1(String name,String desc){
		this.name = name;
		this.desc = desc;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return name + ":" + desc;
	}
	
}


枚舉也可以實現接口:

package com.an.testenum;

/*
 * 枚舉也可以實現接口
 */
public class TestEnum3 {
	public static void main(String[] args) {
		Gender m = Gender.MAN;
		Gender w = Gender.WOMAN;
		
		m.walk();
		w.walk();
	  //輸出
		//男人走路
		//女人走路
	}
}

interface Walk{
	void walk();
}

enum Gender implements Walk{
	MAN{
		@Override
		public void walk() {
			// TODO Auto-generated method stub
			System.out.println("男人走路");
		}
	},WOMAN{
		@Override
		public void walk() {
			// TODO Auto-generated method stub
			System.out.println("女人走路");
		}
	};

	@Override
	public void walk() {
		System.out.println("走路");
	}
	
}

枚舉內的一些元素可以看做爲一個構造器。調用時可以想象一下
發佈了101 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章