回顾
3.枚举类与枚举关键字的联系
五、类集对于枚举的支持
EnumMap和EnumSet类
1.EnumMap
2.EnumSet
学习小结
六、深入了解枚举
1.枚举的构造方法
java虚拟机一般将对被创建的枚举类型对象自动编号,编号从0开始。通过定制内部方法,实现控制每个枚举类型的值。
范例:定义枚举的构造方法
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) { // 构造方法
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, "黑色"); // 重新设置名称
System.out.println("4-->" + NewColor.getName(4));
NewColor.setIndex(7, "黑色"); // 重新设置索引编号
System.out.println("7-->" + NewColor.getName(7));
}
}
运行结果:
运行结果
2.枚举的接口
①.为什么需要接口
Java语言中的接口,只是对要实现该接口方法的所有类提出了一个共享的固定格式的协议(protocol)。这些协议固定了在其内的静态常量和方法签名(方法名+参数列表)形式,而继承这个接口的类,就可在其类中对这些继承而来的方法,“独立自主、自由发挥”地实现这些方法。
Java不支持多继承,采用单继承多接口的模式,既保持了类的数据安全,也间接实现了多继承。
②.枚举中如何实现接口
枚举和普通类一样,可以实现一个或者多个接口。当一个枚举实现一个接之后,各个枚举对象都必须分别实现接口中的抽象方法。
范例
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:23:27
* @Description TODO 创建接口
*/
public interface P269_11_11_1 {
public String getColor();
}
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:27:44
* @Description TODO 对新建接口抽象方法的调用
*/
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()); // 遍历输出
}
}
}
运行结果:
运行结果
3.在枚举中定义抽象方法
可以在枚举中直接定义抽象方法,但需要为枚举中的每个对象单独实现此方法。
PS.抽象方法:就是用关键字abstract修饰且没有实现主体的方法。
范例
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月13日 下午10:55:56
* @Description TODO 定义枚举的抽象方法
*/
enum NewColor2 {
红色 { // 每个枚举对象都需要实现所定义的抽象方法
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());
}
}
}
运行结果:
运行结果
思考
今天,我开始把范例也加进学习小结里,本来并不想以此充数的,可是想了想,范例,也是我边学边做一个字母一个字母码出来的,也是学习的内容,不添加进来的话,学习的笔记确实很单薄呀。
明天,枚举应该可以结尾了,结尾后,可以再深入点学习java了。