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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-15 17:52 编辑
  1. public enum TrafficLamp{
  2. Red(30){     //听张老师讲了还是有点儿似懂非懂
  3. public TrafficLamp nextLamp(){
  4. return Green;
  5. }
  6. },
  7. Green(45){
  8. public TrafficLamp nextLamp(){
  9. return Yellow;
  10. }
  11. },
  12. Yellow(5){
  13. public TrafficLamp nextLamp(){
  14. return Red;
  15. }
  16. };
  17. public abstract TrafficLamp nextLamp();//抽象方法
  18. private int time;
  19. private TrafficLamp(int time) {
  20. this.time = time;
  21. }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
(30)这算是带构造参数的枚举。枚举类中的抽象方法每一个枚举元素都要实现
回复 使用道具 举报
你应该把RED当作一个对象,这是调用带参数的构造方法。

评分

参与人数 1黑马币 +2 收起 理由
杜光 + 2 赞一个!

查看全部评分

回复 使用道具 举报
首先枚举是为了保证安全的一个机制.
比如你这个例子.限制了只能调用red,green,yellow这三个成员.
你定义了一个抽象函数叫nextlamp,然后给三个成员都写了一个构造函数以达到你的期望目的---在调用该成员时返回你的期望值(下一个灯的颜色).
最后为了使这段代码更加贴近实际,又加上了一个带参数的构造函数来定义每个灯持续的时间.这个参数是Int类型的. 所以你必须给每个灯赋值.
不知道这样解释的够不够清楚.


评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 很给力!

查看全部评分

回复 使用道具 举报
呵呵,你这问题够大朋友。我是这么理解枚举的:枚举就可以认为是多个单例对象,这些个对象都必须符合这个枚举类的规则。那这个规则是怎么样的呢,从构造函数说来
  1. 18.private int time;

  2. 19.private TrafficLamp(int time) {

  3. 20.this.time = time;

  4. 21.}

复制代码
这个类要求必须有time这么一个成员属性。所以在对象上也得加入time参数。
而类中有抽象方法,这更好理解了,普通类继承一个普通抽象类也得实现那些抽象方法呢,所以在得出这个对象的时候必须实现那些抽象方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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