黑马程序员---关于枚举的理解
2015-12-24 10:26
525 查看
--------android培训java培训期待与您交流------所谓的枚举,其本质还是一个Java类(编译后的文件是.class结尾),或者说是一个特殊的Java类;他的构造函数是私有的,默认覆盖了toString方法,因此他的成员名就是toString的返回值;
特殊情况:如果他只有一个成员就是一个单例设计模式;同时既然他是一个特殊的java类,就应该具有Java类级别的一些特性;代码示例:
time){ this.time=time; } }
@Override public TrafficLamp nextLamp()
{ return
YELLOW; } }; public static final TrafficLamp YELLOW=new
TrafficLamp(){ @Override public TrafficLamp nextLamp()
{ return
GREEN; } }; public static final TrafficLamp GREEN=new
TrafficLamp(){ @Override public TrafficLamp nextLamp()
{ return
RED; } }; public abstract TrafficLamp nextLamp();}上面这个是一个抽象类,但是抽象类中定义了该类的匿名子类实例对象;如果你对匿名内部类熟悉的话,估计一看就懂;然后你把上面三个东西合起来看估计就融会贯通了。
转发至微博
特殊情况:如果他只有一个成员就是一个单例设计模式;同时既然他是一个特殊的java类,就应该具有Java类级别的一些特性;代码示例:
public enum TrafficLamp { RED(30) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return GREEN; } }, YELLOW(5) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return RED; } }, GREEN(45) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return YELLOW; } }; private int time; private TrafficLamp() { } private TrafficLamp(int time) { this.time = time; } public abstract TrafficLamp nextLamp(); }关于上面这个示例,我想我们还是一步步的分解下吧:首先来个最简单的 ------------------------------------------------------------------------------------------------public enum TrafficLamp{ RED,YELLOW,GREEN; private TrafficLamp(){} }
上面这个是 了一个默认构 函数的注解,没有抽象方法;应该很容易看懂;----------------------------------------------------------------------------------------------- public enum TrafficLamp{ RED(4),YELLOW,GREEN(5); private int time; private TrafficLamp(){} private TrafficLamp(int
time){ this.time=time; } }
这个枚举 了个成员变量time,和重载的有参构 函数, 为我们说过枚举是一个特殊的java类,那么他就应该具有Java类级别的特性,
成员变量和重载的构 函数当然也可以了
-----------------------------------------------------------------------------------------------------
public abstract class TrafficLamp { public static final TrafficLamp RED=new TrafficLamp(){
@Override public TrafficLamp nextLamp()
{ return
YELLOW; } }; public static final TrafficLamp YELLOW=new
TrafficLamp(){ @Override public TrafficLamp nextLamp()
{ return
GREEN; } }; public static final TrafficLamp GREEN=new
TrafficLamp(){ @Override public TrafficLamp nextLamp()
{ return
RED; } }; public abstract TrafficLamp nextLamp();}上面这个是一个抽象类,但是抽象类中定义了该类的匿名子类实例对象;如果你对匿名内部类熟悉的话,估计一看就懂;然后你把上面三个东西合起来看估计就融会贯通了。
转发至微博
------------------------------------------------------------------------------------------------------想必到这了 应该能看懂最上面那一大块代 了吧,是的他是一个抽象的枚举,有一个抽象方法nextLamp;而定义枚举的成员时我们使用到了匿名内部类,也就是说RED后面的那个{}其实表示的是声明了一个TrafficLamp的一个子类(不知道可不可以这 称呼,先凑合着吧),覆盖父类的抽象方法;
转发至微博
相关文章推荐
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册管理系统(Sp…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--JAVA中23种设计模式(-…
- [JAVA面试算法] 用代码体现“水仙花数”
- StackOverflow程序员推荐:每个程序员都应读的30本书
- 一道面试题引发的对android中context的研究(二)
- 一道面试题引发的对android中context的研究(一)-SharedPreference是否可以将文件保存在SD卡上
- 看顶级高手如何编程--从带程序员新手想到的
- 从测试角度看职业生涯
- 程序员自学需要具备的基本技能和素质
- Android之常见面试题
- c#面试题
- c#面试题
- 数据分析师常见的十道面试题目
- Android面试中常见问题集锦
- 脚踏实地 志存高远——我的码农之路