A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 歌诗王道 中级黑马   /  2014-4-17 12:18  /  934 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 歌诗王道 于 2014-4-21 18:35 编辑
  1. public enum TrafficLamp
  2. {
  3.     RED(30)
  4.     {
  5.         public TrafficLamp nextLamp()
  6.         {
  7.              return Green;
  8.          }
  9.      },
  10.     GREEN(45)
  11.     {
  12.          public TrafficLamp nextLamp()
  13.          {
  14.              return YELLOW;
  15.           }
  16.      },
  17.      Yellow(5)
  18.     {
  19.          public TrafficLamp nextLamp()
  20.          {
  21.              return RED;
  22.           }
  23.      };
  24.      public abstract TrafficLamp nextLamp();
  25.      private int time;
  26.      private TrafficLamp(int time){this.time = time;}
  27. }
复制代码
枚举类里定义的元素RED,GREEN,YELLOW的格式没有看懂,是不是匿名内部子类的一种简写方式?

点评

认真看完张孝祥老师的高薪视频之枚举!!!  发表于 2014-4-17 13:28

4 个回复

倒序浏览
枚举可看作一种特殊的类,可添加一些方法。枚举中的元素作为一种特殊类的实例,必须放在枚举内的最前面,它们都是对象,不需要加入集合中,枚举只用实例化一次,就能使用其他所有的枚举元素和方法;枚举中元素是固定的,因而枚举中的构造函数必须私有化。
回复 使用道具 举报
你可以把RED,GREEN和YELLOW看作是TrafficLamp的子类new出来的3个对象,既然是对象,就会有自己的内容,而对象后面的{}里面就写内容。这三个对象都有自己个构造方法和自己的函数。TrafficLamp定义了nextLamp()函数,而RED,GREEN和YELLOW这三个对象就各自复写了这个函数。TrafficLamp里定义了自己的构造方法,RED、GREEN和YELLOW也继承了TrafficLamp的构造方法
回复 使用道具 举报
首先要明白枚举里面的每一个成员都是一个对象,我们先用普通类来实现看看
  1. abstract class Color{
  2.         private int sth;
  3.         private Color(){}
  4.         private Color(int sth){this.sth = sth};
  5.         public final static ColorRED= new Color(){   //这边就是用到了匿名类,并且是无参构造函数

  6.                 @Override
  7.                 public Color nextColor() {
  8.                         // TODO Auto-generated method stub
  9.                         return BLUE;
  10.                 }
  11.                
  12.                
  13.         };
  14.         public final static ColorBLUE= new Color(5){  //这边我们使用匿名类,并用有参构造器

  15.                 @Override
  16.                 public Color nextColor() {
  17.                         // TODO Auto-generated method stub
  18.                         return RED;
  19.                 }
  20.                
  21.         };

  22.         public abstract Color nextColor();
复制代码

new Runnable(){
public void run(){}};像这样的写法就是新建一个实现了Runnable接口的子类对象.如果这个Runnable有有参构造器,还是可以在括号里传值的.
这个看懂了之后再去看你上面的代码,其实就是一件事了,只不过枚举里的成员帮我们封装一下,先理解下上面的例子再看看你的代码,自己理解一下,不懂再看视频

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马