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

--------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的一个子类(不知道可不可以这 称呼,先凑合着吧),覆盖父类的抽象方法;
<script type="text/javascript" id="wumiiRelatedItems"> </script>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值