回顧
3.枚舉類與枚舉關(guān)鍵字的聯(lián)系
五、類集對于枚舉的支持
EnumMap和EnumSet類
1.EnumMap
2.EnumSet
學(xué)習(xí)小結(jié)
六、深入了解枚舉
1.枚舉的構(gòu)造方法
java虛擬機一般將對被創(chuàng)建的枚舉類型對象自動編號,編號從0開始。通過定制內(nèi)部方法,實現(xiàn)控制每個枚舉類型的值。
范例:定義枚舉的構(gòu)造方法
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午8:35:40
*/
enum NewColor {
RED("紅色", 4), GREEN("綠色", 5), BLUE("藍色", 6); // NewColor定義的三個對象
private String name; // 成員變量
private int index; // 索引編號
private NewColor(String name, int index) { // 構(gòu)造方法
this.name = name;
this.index = index;
}
public static String getName(int index) {
for (NewColor c : NewColor.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
public String getName() {
return name;
}
public static void setName(int index, String name) {
for (NewColor c : NewColor.values()) {
if (c.getIndex() == index) {
c.name = name;
return;
}
}
}
public int getIndex() {
return index;
}
public static void setIndex(int index, String name) {
for (NewColor c : NewColor.values()) {
if (c.getName() == name) {
c.index = index;
return;
}
}
}
}
public class P266_11_10 {
public static void main(String[] args) {
System.out.println("------輸出枚舉中元素------");
System.out.println(NewColor.RED.getIndex() + "-->" + NewColor
.RED.getName());
System.out.println(NewColor.GREEN.getIndex() + "-->" + NewColor
.GREEN.getName());
System.out.println(NewColor.BLUE.getIndex() + "-->" + NewColor
.BLUE.getName());
System.out.println("----在自定義編號和屬性值之后,測試----");
NewColor.setName(4, "黑色"); // 重新設(shè)置名稱
System.out.println("4-->" + NewColor.getName(4));
NewColor.setIndex(7, "黑色"); // 重新設(shè)置索引編號
System.out.println("7-->" + NewColor.getName(7));
}
}
運行結(jié)果:

2.枚舉的接口
①.為什么需要接口
Java語言中的接口,只是對要實現(xiàn)該接口方法的所有類提出了一個共享的固定格式的協(xié)議(protocol)。這些協(xié)議固定了在其內(nèi)的靜態(tài)常量和方法簽名(方法名+參數(shù)列表)形式,而繼承這個接口的類,就可在其類中對這些繼承而來的方法,“獨立自主、自由發(fā)揮”地實現(xiàn)這些方法。
Java不支持多繼承,采用單繼承多接口的模式,既保持了類的數(shù)據(jù)安全,也間接實現(xiàn)了多繼承。
②.枚舉中如何實現(xiàn)接口
枚舉和普通類一樣,可以實現(xiàn)一個或者多個接口。當一個枚舉實現(xiàn)一個接之后,各個枚舉對象都必須分別實現(xiàn)接口中的抽象方法。
范例
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:23:27
* @Description TODO 創(chuàng)建接口
*/
public interface P269_11_11_1 {
public String getColor();
}
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:27:44
* @Description TODO 對新建接口抽象方法的調(diào)用
*/
public enum P270_11_11_2 implements P269_11_11_1 {
紅色 { // 每個枚舉對象都需要具體化從接口中繼承而來的方法
public String getColor() {
return "RED";
}
},
綠色 {
public String getColor() {
return "GREEN";
}
},
藍色 {
public String getColor() {
return "BLUE";
}
};
}
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:33:45
* @Description TODO 測試接口
*/
public class P270_11_11_3 {
public static void main(String[] args) {
for (P270_11_11_2 c : P270_11_11_2.values()) {
System.out.println(c.ordinal() + "-->" + c
.name() + ":" + c.getColor()); // 遍歷輸出
}
}
}
運行結(jié)果:

3.在枚舉中定義抽象方法
可以在枚舉中直接定義抽象方法,但需要為枚舉中的每個對象單獨實現(xiàn)此方法。
PS.抽象方法:就是用關(guān)鍵字abstract修飾且沒有實現(xiàn)主體的方法。
范例
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:55:56
* @Description TODO 定義枚舉的抽象方法
*/
enum NewColor2 {
紅色 { // 每個枚舉對象都需要實現(xiàn)所定義的抽象方法
public String getColor() {
return "RED";
}
},
綠色 {
public String getColor() {
return "GREEN";
}
},
藍色 {
public String getColor() {
return "BLUE";
}
};
public abstract String getColor(); // 定義抽象方法
}
public class P271_11_12 {
public static void main(String[] args) {
for (NewColor2 c : NewColor2.values()) {
System.out.println(c.ordinal() + "-->" + c
.name() + ":" + c.getColor());
}
}
}
運行結(jié)果:

思考
今天,我開始把范例也加進學(xué)習(xí)小結(jié)里,本來并不想以此充數(shù)的,可是想了想,范例,也是我邊學(xué)邊做一個字母一個字母碼出來的,也是學(xué)習(xí)的內(nèi)容,不添加進來的話,學(xué)習(xí)的筆記確實很單薄呀。
明天,枚舉應(yīng)該可以結(jié)尾了,結(jié)尾后,可以再深入點學(xué)習(xí)java了。