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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 皮卫凯 中级黑马   /  2012-9-20 15:37  /  1900 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 皮卫凯 于 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不是一个类。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
"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: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;

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢各位解答,我已明了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马