黑马程序员技术交流社区

标题: 张老师的枚举,理解的不好,求解释大致的运行过程 [打印本页]

作者: whs_nk    时间: 2013-3-30 14:57
标题: 张老师的枚举,理解的不好,求解释大致的运行过程
  1. public class TrafficLamp {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 trafficLamp2 lamp = trafficLamp2.RED;
  7.                
  8.         }
  9.        
  10.         public enum trafficLamp2{
  11.                 RED(30){               
  12.                         public trafficLamp2 nextLamp(){
  13.                                 return GREEN;
  14.                         }
  15.                 },
  16.                 GREEN(45){
  17.                         public trafficLamp2 nextLamp(){
  18.                                 return null;
  19.                         }
  20.                 },
  21.                 YELLOW(5){
  22.                         public trafficLamp2 nextLamp(){
  23.                                 return null;
  24.                         }
  25.                 };//枚举值必须放在第一行
  26.                
  27.                 public abstract trafficLamp2 nextLamp();
  28.                
  29.                 private int time;
  30.                 private trafficLamp2(int time){
  31.                         int i=0;
  32.                         this.time = time;
  33.                         System.out.println(this.time+"---It is "+this.name()+" now-----"+(i++));
  34.                        
  35.                 }//构造方法私有化       
  36.         }
  37. }
复制代码

作者: 陆旭东    时间: 2013-3-30 17:34
public class TrafficLamp {

        /**
         * @param args
         */
        public static void main(String[] args) {
                trafficLamp2 lamp = trafficLamp2.RED;
               
        }
        
        public enum trafficLamp2{
                RED(30){     
// 具体实现nextlight方法,表示亮灯后下一个灯是什么颜色
           
                        public trafficLamp2 nextLamp(){
                                return GREEN;
                        }
                },
                GREEN(45){
                        public trafficLamp2 nextLamp(){
                                return null;
                        }
                },
                YELLOW(5){
                        public trafficLamp2 nextLamp(){
                                return null;
                        }
                };//枚举值必须放在第一行
//枚举类中只能定义私有的成员变量和私有的构造方法,先定义一个抽象的方法然后到每个具//体的枚举对象中再去具体实现。

                public abstract trafficLamp2 nextLamp();
               
                private int time;
                private trafficLamp2(int time){
                        int i=0;
                        this.time = time;
                        System.out.println(this.time+"---It is "+this.name()+" now-----"+(i++));
                        
                }//构造方法私有化        
        }
}
你要看老师写这段代码的过程,如果一下子就拿到这段代码,相信新手很少能看懂。我当时就是看老师写代码的过程,这段枚举代码首先是创建了红绿黄三个枚举对象,然后是给枚举类定义nextLamp()方法,而刚刚创建的三个枚举对象又是三个匿名内部子类相应的对象,然后分别实现枚举父类的抽象方法nextLamp(),而红绿灯又有时间,所以在创建三个对象时分别传入它们的延迟时间,这样又重载了构造方法,就是这样。
作者: whs_nk    时间: 2013-3-30 21:37
陆旭东 发表于 2013-3-30 17:34
public class TrafficLamp {

        /**

嗯,就是这样,谢谢!




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