Java枚举类型的原理
来源:互联网 发布:单词带读软件 编辑:程序博客网 时间:2024/05/29 17:40
转载自:http://blog.csdn.net/tanggao1314/article/details/53150298
那么,应该这么理解枚举类型的原理,首先enum Color继承了Java.lang.Enum这个抽象类,但enum Color还是一个抽象类,所以它可以有抽象方法和非抽象方法。
而enum Color中的枚举值变量RED事实上上Color的一个匿名子类,所以它可以实现Color中的抽象方法,这样,当调用System.out.println(Color.RED.getName());就是调用了匿名子类实现的方法。
最后再附上两个使用Java普通类模拟枚举的例子:
public enum Color{RED{public String getName(){return "红色";}},GREEN{public String getName(){return "绿色";}},YELLOW{public String getName(){return "黄色";}};public abstract String getName();}如果RED只是一个Color类的一个static final的实例,那么上面的代码就很让了费解了,为什么在枚举类型中可以有一个抽象方法,而每个枚举值可以对其重新实现?来看下一段测试代码:
public class EnumDemoFour{public static void main(String[] args){//打印该枚举值的名称System.out.println(Color.RED.getName());//打印该枚举值的类System.out.println(Color.RED.getClass());//打印该枚举值的类的父类System.out.println(Color.RED.getClass().getSuperclass());//打印该枚举值的类的父类的父类System.out.println(Color.RED.getClass().getSuperclass().getSuperclass());//打印该枚举类型的修饰符System.out.println(Modifier.toString(Color.class.getModifiers()));}/*运行结果红色class com.lxq.enumm.Color$1class com.lxq.enumm.Colorclass java.lang.Enumpublic abstract*/}该运行结果首先说明了RED和Color不是同一个类,而是前者是后者的一个子类;同时也说明了enum申明的其实是一个abstract的类,所以Color中可以有抽象方法。
那么,应该这么理解枚举类型的原理,首先enum Color继承了Java.lang.Enum这个抽象类,但enum Color还是一个抽象类,所以它可以有抽象方法和非抽象方法。
而enum Color中的枚举值变量RED事实上上Color的一个匿名子类,所以它可以实现Color中的抽象方法,这样,当调用System.out.println(Color.RED.getName());就是调用了匿名子类实现的方法。
最后再附上两个使用Java普通类模拟枚举的例子:
enum DeviceType {unknown(2),phone(4)private final int value;private DeviceType(int value) {this.value = value;}public static DeviceType valueOf(int value) {switch (value) {case 2:return unknown;case 4:return phone;default:return unknown;}}public int value() {return value;}}
public enum WeekDateEnum {MON {@Overridepublic WeekDateEnum nextDay() {return TUES;}@Overridepublic WeekDateEnum preDay() {return SUN;}}, TUES {@Overridepublic WeekDateEnum nextDay() {return WEDNES;}@Overridepublic WeekDateEnum preDay() {return MON;}}, WEDNES {//...}, THURS {//...}, FRI {//...}, SATUR { //...}, SUN { //...};private WeekDateEnum() {}public abstract WeekDateEnum nextDay();public abstract WeekDateEnum preDay();/** * 枚举对象公共的toString方法,也可以在定义枚举类时定义 */public String toString() {switch (this) {case MON:return "WeekDateEnum.MON";case TUES:return "WeekDateEnum.TUES";case WEDNES:return "WeekDateEnum.WEDNES";case THURS:return "WeekDateEnum.THURS";case FRI:return "WeekDateEnum.FRI";case SATUR:return "WeekDateEnum.SATUR";case SUN:return "WeekDateEnum.SUN";default:return null;}}}
0 0
- Java枚举类型的原理
- Java枚举类型的原理
- Java枚举类型enum的原理
- Java枚举类型enum的使用原理
- java 枚举类型的原理、作用
- java枚举类型的实现原理
- java枚举类型的实现原理
- Java枚举类型的使用和原理
- Java学习整理系列之Java枚举类型的原理
- Java学习整理系列之Java枚举类型的原理
- Java学习整理系列之Java枚举类型的原理
- Java学习整理系列之Java枚举类型的原理
- 深入Java 1.5枚举类型的内部实现原理
- Java的枚举类型
- java的枚举类型
- java的枚举类型
- Java的枚举类型
- Java枚举类型详解(原理+用法)
- js的行变色的鼠标事件代码
- 字符实体
- iOS Runtime原理及使用
- 线程的基本概念、线程的基本状态以及状态之间的关系
- Hibernate实体类的操作
- Java枚举类型的原理
- Oracle安装目录空间不够,增加挂载
- 学习Opencv Chat3
- Oracle awr报告
- bzoj4515: [Sdoi2016]游戏
- 专升本高数学习总结——微分
- ospp.vbs参数说明
- strcpy,memcpy函数的实现
- 详解Python中yield生成器的用法