黑马程序员 - 用普通类模拟枚举的实现原理
来源:互联网 发布:淘宝直播翡翠是真的吗 编辑:程序博客网 时间:2024/04/28 04:36
------- android培训、java培训、期待与您交流! ----------
定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface.
当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。
下面用普通类模拟枚举的实现原理
WeekDay类 例1
package com.itsoft;public class WeekDay {private WeekDay() {}public static final WeekDay SUM = new WeekDay();//周末public static final WeekDay MON = new WeekDay();//周一public WeekDay nextDay() {//明天是周几呢 if (this == SUM) return MON; //...省略其他的if...else... else return SUM;}public String toString() {//重写toString()方法用于返回对象信息 return this == SUM ? "SUM" : "MON";}}EnumTest.javapackage com.itsoft;public class EnumTest {public static void main(String[] args) { WeekDay weekDay = WeekDay.MON; System.out.println(weekDay.nextDay());//输出SUM}}
WeekDay类 例2
package com.itsoft;public abstract class WeekDay {private WeekDay() {}public abstract WeekDay nextDay();/* * 下面这段代码表示: 由于WeekDay类中定义的有抽象方法,所以它必须声明为个抽象类,不能用new直接创建对象,必须由其子类来创建对象, * WeekDay SUM = new WeekDay() {};这个大括号{}就表示由WeekDay的子类来创建对象,该子类没有名字, * 被称为匿名内部类,子类的具体代码就在这个大括号{}种,当然子类要覆盖父类的方法。 */public static final WeekDay SUM = new WeekDay() { @Override public WeekDay nextDay() { return MON; }};public static final WeekDay MON = new WeekDay() { @Override public WeekDay nextDay() { return SUM; }};public abstract WeekDay nextDay() {}public String toString() { return this == SUM ? "SUM" : "MON";}} EnumTest.javapackage com.itsoft;public class EnumTest {public static void main(String[] args) { WeekDay weekDay = WeekDay.MON; System.out.println(weekDay.nextDay());//输出SUM}}
0 0
- 黑马程序员 - 用普通类模拟枚举的实现原理
- 用普通类模拟枚举的实现原理
- 用普通类模拟枚举--枚举的原理
- java普通类模拟枚举实现原理
- Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)
- 普通类模拟枚举类实现
- 运用普通类模拟实现枚举功能
- 用普通类模拟枚举类型
- 黑马程序员-java枚举实现原理及应用
- 【黑马程序员】枚举类手动实现
- 黑马程序员——枚举的原理及枚举构造方法调用,抽象方法实现等等介绍
- 黑马程序员------java5的枚举(枚举的原理、枚举的应用)
- 黑马程序员_简单类实现枚举_枚举的高级应用
- 黑马程序员---枚举类
- 普通类实现枚举类
- 黑马程序员----枚举类的学习笔记
- 黑马程序员-关于枚举类的使用
- 黑马程序员-枚举类的使用
- 新入驻人员
- matlab 亮度变换之imadjst函数
- 从尾到头打印链表
- 如何判断一款jQuery插件的好坏
- 编程之路 - 写给打算进入IT行业的新人们
- 黑马程序员 - 用普通类模拟枚举的实现原理
- 深度学习总结
- 整理调试
- Modal
- 转载:Android 布局属性详解
- js实现 股票实时数据 监测
- word 2010 中没有endnote加载项,解决办法
- php调用mysql存储过程返回结果集的处理
- 页面有限没有复制的blog