黑马程序员技术交流社区

标题: 今天的最后一个问题了,关于枚举的问题 [打印本页]

作者: crazy_primitive    时间: 2013-7-14 10:44
标题: 今天的最后一个问题了,关于枚举的问题
本帖最后由 杨兴庭 于 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. }
复制代码

作者: 王靖远    时间: 2013-7-14 10:55
(30)这算是带构造参数的枚举。枚举类中的抽象方法每一个枚举元素都要实现
作者: 280270738    时间: 2013-7-14 11:01
你应该把RED当作一个对象,这是调用带参数的构造方法。
作者: 白堇翎    时间: 2013-7-14 12:01
首先枚举是为了保证安全的一个机制.
比如你这个例子.限制了只能调用red,green,yellow这三个成员.
你定义了一个抽象函数叫nextlamp,然后给三个成员都写了一个构造函数以达到你的期望目的---在调用该成员时返回你的期望值(下一个灯的颜色).
最后为了使这段代码更加贴近实际,又加上了一个带参数的构造函数来定义每个灯持续的时间.这个参数是Int类型的. 所以你必须给每个灯赋值.
不知道这样解释的够不够清楚.



作者: wll_sx1990    时间: 2013-7-14 23:06
呵呵,你这问题够大朋友。我是这么理解枚举的:枚举就可以认为是多个单例对象,这些个对象都必须符合这个枚举类的规则。那这个规则是怎么样的呢,从构造函数说来
  1. 18.private int time;

  2. 19.private TrafficLamp(int time) {

  3. 20.this.time = time;

  4. 21.}

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2