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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵永康 中级黑马   /  2012-9-17 17:38  /  2219 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当在枚举类中定义了带有参数的构造方法,此时枚举类还有默认的无参构造方法吗??
带有抽象方法的枚举,当枚举元素去实现时候,枚举元素相当于一个匿名内部类吗??枚举元素和枚举名称此时级别是什么的?估计大家不明白意思,看张老师代码
public enum TrafficLamp
{
      RED(90){public TrafficLamp next(){return  GREEN}};,YELLOW(3){public TrafficLamp  next(){ return RED};},GREEN(60){public TrafficLamp  next(){return  YELLOW};};
     private TrafficLamp(int  time){this.time=time}
     private int time
     public abstract  TrafficLamp    next();
}
在这个枚举中还有无参数的构造方法吗??当我把写成RED{public TrafficLamp  next(){return GREEN};}编译能不能通过??
RED GREEN  YELLOW 是相当于一个匿名内部类吗??他们是TrafficLamp的元素----即实例对象,那么此时他们和TrafficLamp在级别上是什么关系??

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人提问 多多支持

查看全部评分

2 个回复

倒序浏览
注意枚举类其实也是一个类,因此其一样可以在里边定义成员和方法。
在上边的代码中包含了RED,YELLOW,Green三个匿名内部类,当你编译时你会看到,多出来的三个class文件。还定义了一个私有的成员time,和一个抽象的方法next();
虽然上边定义的枚举元素含有参数,但是其无参的构造器还是存在的。比如说:
public enum Gender
{
        //此处的枚举值必须调用对应构造器来创建
        MALE("男"),FEMALE("女");
        private final String name;
        //枚举类的构造器只能使用private修饰
        private Gender(String name)
        {
                this.name = name;
        }
        public String getName()
        {
                return this.name;
        }
}
其实在枚举中中列出枚举值时就是就是调用构造器创造枚举对象,只是无需new关键字,也不需要现实的调用构造器。前面列出枚举值时无需传入参数甚至无需使用括号,就是因为枚举类包含无参构造器。

评分

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

查看全部评分

回复 使用道具 举报
史小兵 发表于 2012-9-17 19:23
注意枚举类其实也是一个类,因此其一样可以在里边定义成员和方法。
在上边的代码中包含了RED,YELLOW,Green ...

谢谢 明白啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马