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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左华清 黑马帝   /  2012-2-24 15:39  /  2270 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 左华清 于 2012-2-24 19:42 编辑

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

enum 相当一个类,RED,GREEN,YELLOW,相当于这个类的三个对象,
然后enum有一个带一个参数的构造函数,能这么理解吗,

抽象方法,内部类这个是怎么回事?

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 视频学习过了么?建议去看视频!.

查看全部评分

7 个回复

倒序浏览
本帖最后由 马胜平 于 2012-2-24 16:02 编辑

枚举里面实例后面的花括号部分实际上就是一个类体部分,在这种情况下当创建枚举值时
并不是直接创建枚举类的实例,而是相当于创建了枚举类的匿名子类的实例,那对花括号是匿名内部类的类体

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 雷楚光 于 2012-2-24 16:07 编辑

你的理解错了。
首先enum 相当一个类,RED,GREEN,YELLOW,相当于这个类的子类三个对象。
因为该类有抽象方法,所以必须用子类继承这个类把它的抽象方法实体化。这样才能建立对象。

再由于enum有私有构造函数,那么它就必须在内部建立类。

于是就有:
1.创建子类,用子类去实体化抽象方法。
2.枚举的必须是对象(枚举的构造函数都是私有的),由于有抽象方法又不能建立自己的对象,那么就必须用子类去继承它,再建立子类的对象。
于是就有:建立子类对象就要把把父类的的抽象方法实体化,而只能在内部建立对象。于是必须用内部类。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
简单点说就是:
1.必须再内部建立对象。
2.建立对象又必须把抽象方法实体化。
所有必须在内部建子类,再建立子类对象。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
enum 相当于特殊的类,RED,GREEN,YELLOW相当于TrafficLamp的子类,这三者的实现要调用TrafficLamp的有参构造函数,也要实现TrafficLamp的抽象(abstract) 方法。
回复 使用道具 举报
谢谢各位!
回复 使用道具 举报
黄方 中级黑马 2012-2-25 19:24:32
7#
enum是一个类,你可以看看API
回复 使用道具 举报
黄方 中级黑马 2012-2-25 21:52:30
8#
本帖最后由 舞动的心弦 于 2012-2-25 21:53 编辑

public class CollectionForLoop{

       enum MySeasonEnum{spring, summer, fall, winter}

       public static void main(String[] args) {

              for(MySeasonEnum season : MySeasonEnum.values())

              {

                     System.out.println("The season is now " + season);

              }

       }

}

这个问题和我昨天注册论坛看到的交通灯问题类似!你看看这个例子吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马