黑马程序员技术交流社区

标题: 枚举enum中的抽象方法。 [打印本页]

作者: 皮卫凯    时间: 2012-9-20 15:37
标题: 枚举enum中的抽象方法。
本帖最后由 皮卫凯 于 2012-9-20 16:19 编辑

public enum TrafficLamp{
      RED(30){                                                           //  1
                       public  TrafficLamp nextLamp()
                          {
                             return GREEN;
                          }
                    },
  GREEN(45){
                      public  TrafficLamp nextLamp()
                         {
                           return YELLOW;
                          }   
                    },
  YELLOW(5){
                        public  TrafficLamp nextLamp()
                      {
                        return RED;
                       }   
                    };
  public abstract TrafficLamp nextLamp();         // 2
  private int time;
  private TrafficLamp(int time){this.time = time;}
}

1、RED,GREEN,YELLOW                              这可以理解是enum的3个元素么
     RED{ },GREEN{ },YELLOW{ }                 RED{ } 可以理解为 enum 的内部类么
     RED( ){ },GREEN( ){ },YELLOW( ){ }       RED( ){ } 怎么搞。。。。

2、2处定义了一个抽象的方法,那么enum 类前面不也要加上abstract 作为抽象类么。从这里是不是可以看出enum不是一个类。


作者: AngieFans85    时间: 2012-9-20 15:56
"1、RED,GREEN,YELLOW                              这可以理解是enum的3个元素么
     RED{ },GREEN{ },YELLOW{ }                 RED{ } 可以理解为 enum 的内部类么
     RED( ){ },GREEN( ){ },YELLOW( ){ }       RED( ){ } 怎么搞。。。。"

RED,GREEN,YELLOW可以理解为TrafficLamp的一个元素,其实他们是TrafficLamp的具体的一个实例.
RED{ },GREEN{ },YELLOW{ }是调用枚举TrafficLamp的默认无参的构造方法.
RED( ){ },GREEN( ){ },YELLOW( ){ }是调用枚举TrafficLamp的有参构造方法.



"2、2处定义了一个抽象的方法,那么enum 类前面不也要加上abstract 作为抽象类么。从这里是不是可以看出enum不是一个类"

enmu就是一个类,enum默认继承Enum类.
给一个枚举定义抽象方法,那么枚举中的每个实例都要实现该抽象方法.
作者: 夏天    时间: 2012-9-20 16:03
本帖最后由 夏诗瑶 于 2012-9-20 16:04 编辑

针对你的问题,其实我阅读的时候也有类似的问题,我的理解是这样的。

1、RED,GREEN,YELLOW                          // 这就是你所枚举的TrafficLamp的三个元素!!
     RED{ },GREEN{ },YELLOW{ }                // 理解为子类对象更好,其实内部类就是子类对象
     RED( ){ },GREEN( ){ },YELLOW( ){ }       //因为是子类对象,对象初始化的时候可以有参数。所以可以是 RED( ){ }//而且,这些都是枚举的特点,就是这个技术的格式,不用去问为什么是这样的。

2、2处定义了一个抽象的方法。
抽象方法只能存在于抽象类中,因为枚举是不能动态实例化对象,所以你可以把枚举看成是抽象类。
实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 经继承了 java.lang.Enum(java是单一继承)。

这是通过反编译看到的部分代码
public class cn.itcast.test.EnumTest extends java.lang.Enum{
    public static final  cn.itcast.test.EnumTest MON;//默认都是公共静态最终
    public static final  cn.itcast.test.EnumTest TUE;
    public static final  cn.itcast.test.EnumTest WED;


作者: 皮卫凯    时间: 2012-9-20 16:09
谢谢各位解答,我已明了。




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