您的位置:首页 > 职场人生

黑马程序员---关于枚举的理解

2015-12-24 10:26 525 查看
--------android培训java培训期待与您交流------所谓的枚举,其本质还是一个Java类(编译后的文件是.class结尾),或者说是一个特殊的Java类;他的构造函数是私有的,默认覆盖了toString方法,因此他的成员名就是toString的返回值;
特殊情况:如果他只有一个成员就是一个单例设计模式;同时既然他是一个特殊的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的一个子类(不知道可不可以这 称呼,先凑合着吧),覆盖父类的抽象方法;
转发至微博
 转发至微博
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: