回顧
3.枚舉類與枚舉關(guān)鍵字的聯(lián)系
五杨刨、類集對(duì)于枚舉的支持
EnumMap和EnumSet類
1.EnumMap
2.EnumSet
學(xué)習(xí)小結(jié)
六赖舟、深入了解枚舉
1.枚舉的構(gòu)造方法
java虛擬機(jī)一般將對(duì)被創(chuàng)建的枚舉類型對(duì)象自動(dòng)編號(hào)纬凤,編號(hào)從0開(kāi)始聘裁。通過(guò)定制內(nèi)部方法,實(shí)現(xiàn)控制每個(gè)枚舉類型的值鹃彻。
范例:定義枚舉的構(gòu)造方法
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午8:35:40
*/
enum NewColor {
RED("紅色", 4), GREEN("綠色", 5), BLUE("藍(lán)色", 6); // NewColor定義的三個(gè)對(duì)象
private String name; // 成員變量
private int index; // 索引編號(hào)
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("----在自定義編號(hào)和屬性值之后尉桩,測(cè)試----");
NewColor.setName(4, "黑色"); // 重新設(shè)置名稱
System.out.println("4-->" + NewColor.getName(4));
NewColor.setIndex(7, "黑色"); // 重新設(shè)置索引編號(hào)
System.out.println("7-->" + NewColor.getName(7));
}
}
運(yùn)行結(jié)果:
2.枚舉的接口
①.為什么需要接口
Java語(yǔ)言中的接口,只是對(duì)要實(shí)現(xiàn)該接口方法的所有類提出了一個(gè)共享的固定格式的協(xié)議(protocol)贪庙。這些協(xié)議固定了在其內(nèi)的靜態(tài)常量和方法簽名(方法名+參數(shù)列表)形式蜘犁,而繼承這個(gè)接口的類,就可在其類中對(duì)這些繼承而來(lái)的方法止邮,“獨(dú)立自主这橙、自由發(fā)揮”地實(shí)現(xiàn)這些方法。
Java不支持多繼承导披,采用單繼承多接口的模式屈扎,既保持了類的數(shù)據(jù)安全,也間接實(shí)現(xiàn)了多繼承撩匕。
②.枚舉中如何實(shí)現(xiàn)接口
枚舉和普通類一樣鹰晨,可以實(shí)現(xiàn)一個(gè)或者多個(gè)接口。當(dāng)一個(gè)枚舉實(shí)現(xiàn)一個(gè)接之后止毕,各個(gè)枚舉對(duì)象都必須分別實(shí)現(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 對(duì)新建接口抽象方法的調(diào)用
*/
public enum P270_11_11_2 implements P269_11_11_1 {
紅色 { // 每個(gè)枚舉對(duì)象都需要具體化從接口中繼承而來(lái)的方法
public String getColor() {
return "RED";
}
},
綠色 {
public String getColor() {
return "GREEN";
}
},
藍(lán)色 {
public String getColor() {
return "BLUE";
}
};
}
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:33:45
* @Description TODO 測(cè)試接口
*/
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()); // 遍歷輸出
}
}
}
運(yùn)行結(jié)果:
3.在枚舉中定義抽象方法
可以在枚舉中直接定義抽象方法,但需要為枚舉中的每個(gè)對(duì)象單獨(dú)實(shí)現(xiàn)此方法扁凛。
PS.抽象方法:就是用關(guān)鍵字abstract修飾且沒(méi)有實(shí)現(xiàn)主體的方法忍疾。
范例
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:55:56
* @Description TODO 定義枚舉的抽象方法
*/
enum NewColor2 {
紅色 { // 每個(gè)枚舉對(duì)象都需要實(shí)現(xiàn)所定義的抽象方法
public String getColor() {
return "RED";
}
},
綠色 {
public String getColor() {
return "GREEN";
}
},
藍(lán)色 {
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());
}
}
}
運(yùn)行結(jié)果:
思考
今天,我開(kāi)始把范例也加進(jìn)學(xué)習(xí)小結(jié)里谨朝,本來(lái)并不想以此充數(shù)的卤妒,可是想了想甥绿,范例,也是我邊學(xué)邊做一個(gè)字母一個(gè)字母碼出來(lái)的则披,也是學(xué)習(xí)的內(nèi)容共缕,不添加進(jìn)來(lái)的話,學(xué)習(xí)的筆記確實(shí)很單薄呀收叶。
明天骄呼,枚舉應(yīng)該可以結(jié)尾了,結(jié)尾后判没,可以再深入點(diǎn)學(xué)習(xí)java了蜓萄。