黑马程序员技术交流社区

标题: 求思路,求指导 [打印本页]

作者: 孙天    时间: 2012-5-5 23:29
标题: 求思路,求指导
public class TrafficLiight{
public static void main(String[] args){



TrafficLamp a=TrafficLamp.RED(30);
System.out.println(a.nextLamp());
}


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();
public static TrafficLamp RED(int i) {
// TODO Auto-generated method stub
return null;
}
private TrafficLamp(int time){
}

}
}
运行出错了
作者: —__    时间: 2012-5-5 23:51
本帖最后由 —__ 于 2012-5-6 03:12 编辑

占用沙发~
潇洒飘过~
我也不回~

作者: 徐慧书    时间: 2012-5-5 23:58
哥们,既然是枚举,那是静态的,当你在程序中调用这个枚举类时,它便进行初始化RED,GREEN,YELLOW三个枚举类型已经初始化完了,接着你是调用对象了,可你调用的时候还加个时间参数,这就有问题了吧,相当于说对象再实例化!应该去掉吧,用手机上的,纠结
作者: 徐慧书    时间: 2012-5-6 00:07
楼上的,这就是你的不清楚了,那些写法都是正确的。逗号那是分割三个静态对象,而逗号前面的大括号是重写了父类的方法所用,这里的RED已经不再是这个枚举类型,而是它的匿名子类的对象!而后面的大括号也刚好,一个是这个程序的类的,一个是枚举这个内部类的,其他的就是对应方法的咯,希望你能明白!多看视频吧
作者: 徐慧书    时间: 2012-5-6 00:08
楼上的,这就是你的不清楚了,那些写法都是正确的。逗号那是分割三个静态对象,而逗号前面的大括号是重写了父类的方法所用,这里的RED已经不再是这个枚举类型,而是它的匿名子类的对象!而后面的大括号也刚好,一个是这个程序的类的,一个是枚举这个内部类的,其他的就是对应方法的咯,希望你能明白!多看视频吧
作者: 徐慧书    时间: 2012-5-6 00:09
楼上的,这就是你的不清楚了,那些写法都是正确的。逗号那是分割三个静态对象,而逗号前面的大括号是重写了父类的方法所用,这里的RED已经不再是这个枚举类型,而是它的匿名子类的对象!而后面的大括号也刚好,一个是这个程序的类的,一个是枚举这个内部类的,其他的就是对应方法的咯,希望你能明白!多看视频吧
作者: 徐慧书    时间: 2012-5-6 00:11
楼上的,这就是你的不清楚了,那些写法都是正确的。逗号那是分割三个静态对象,而逗号前面的大括号是重写了父类的方法所用,这里的RED已经不再是这个枚举类型,而是它的匿名子类的对象!而后面的大括号也刚好,一个是这个程序的类的,一个是枚举这个内部类的,其他的就是对应方法的咯,希望你能明白!多看视频吧
作者: 徐慧书    时间: 2012-5-6 00:13
楼上的,这就是你的不清楚了,那些写法都是正确的。逗号那是分割三个静态对象,而逗号前面的大括号是重写了父类的方法所用,这里的RED已经不再是这个枚举类型,而是它的匿名子类的对象!而后面的大括号也刚好,一个是这个程序的类的,一个是枚举这个内部类的,其他的就是对应方法的咯,希望你能明白!多看视频吧
作者: 徐慧书    时间: 2012-5-6 00:17
哥们,对不住了,这手机无限重发了,睡了,拜
作者: 何阳    时间: 2012-5-6 00:26
class TrafficLiight{
public static void main(String[] args){

                TrafficLamp a=TrafficLamp.RED(30);//枚举中以将构造函数私有化了,你认为你还可以传值吗?
                System.out.println(a.nextLamp());
                System.out.println("下一个是"+a.nextLamp()+"你需要等待"+a.getTime());
        }
        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();
       //不明白你此处是什么意思
        //public static TrafficLamp RED(int i) {
        // TODO Auto-generated method stub
        //return null;
        //}
        //如果你想获取red的时间,你可以这样做
        public  int getTime(){
                return time;
        }
    private int time;
        //此处错误,你根本没有那个time的变量,你怎么通过构造函数初始化
        private TrafficLamp(int time){
                this.time=time;
        }
}
}




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