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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 兴朗ok 中级黑马   /  2013-5-19 17:04  /  1522 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 兴朗ok 于 2013-5-20 15:11 编辑

public enum TrafficLamp{
     RED(39){
       public TrafficLamp nextLamp(){
           return GREEN;
        }

    },
      GREEN(45){
       public TrafficLamp nextLamp(){
           return YELLOW;
        }

    },
     YELLOW(3){
       public TrafficLamp nextLamp(){
           return RED;
        }

    };
    public abstract TrafficLamp nextLamp();

}

这里面的成员变量,和子类实例化,有点乱,望求解???谢谢

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
王溢君 来自手机 中级黑马 2013-5-19 17:12:56
沙发
每一个枚举成员可以了解成创建实例化的对象。里面有抽象的方法。所以都得重写这个方法。
回复 使用道具 举报
因为那个成员变量是类 public static Traffic Red = new Traffic();
所以它也可以有参数传递进去

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
1. 枚举是这样一种特殊的类: 这个类一旦定义了, 就只能取,内部枚举列表里面声明了的那几个枚举类对象;(类似单例模式,只不过这里是多个限定元素)
2. 所有的枚举类对象都被定义在枚举类的枚举列表中, 生成枚举列表里面的元素时,可以是默认无参的 也可以是 有参的
3. 有参的枚举元素, 需要在类的内部自定义 枚举类的有参构造函数,注意此时定义了有参构造函数不会默认给出无参构造函数(和一般类一样)
4. 枚举类中一样可以定义方法,枚举元素(对象)一样可以调用这些方法
5. 原帖例子中定义了 抽象的方法, 所以, 这个枚举类本身是抽象的, 所以其枚举元素需要复写这些抽象的方法以实现实例化
6. 之所以, 用定义抽象方法再实例化的模式,是为了避免在一个方法内用switch来实现不同枚举元素的特定方法输出, 更符合OO原则,也方便维护
7. 所以,可以看出, 从构造函数,成员方法,成员变量的角度看,枚举类和普通的类基本没啥区别, 唯一的不同可能就是多了枚举元素列表限定了可实现对象

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
貌似问题解决了
要是解决及时更改问题状态,重新编辑为已解决
否则继续追问
回复 使用道具 举报
发重复了,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马