黑马程序员技术交流社区

标题: 求解 最好详细点 [打印本页]

作者: 潜伏    时间: 2013-12-9 11:47
标题: 求解 最好详细点
package com.baidu.day1;
//带有抽象方法的枚举
public class EnumDemo {
        public static void main(String[] args){
                System.out.println(TrafficLamp.RED.nextLamp());
        }
        public enum TrafficLamp{
                RED{
                        public TrafficLamp nextLamp()
                        {
                                return YELLOW;
                        }
                },
                YELLOW{
                        public TrafficLamp nextLamp()
                        {
                                return GREEN;
                        }
                },
                GREEN{//此RED到底是TrafficLamp对象还是其子类对象
                        public TrafficLamp nextLamp()
                        {
                                return RED;
                        }
                };
                public abstract TrafficLamp nextLamp();//为什么此类不是抽象的?????抽象成员必须是抽象方法嘛
        }
}

作者: hel    时间: 2013-12-9 13:25
RED   YELLOW  GREEN 是这个枚举类的对象,对象要使用匿名内部类,就必须要有抽象方法或接口

作者: 想你的夜    时间: 2013-12-9 13:48
第一个问题: RED是枚举类TrafficLamp的一个实例对象,而不是你说的什么子类对象:
第二个问题:当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,此处的抽象方法 public abstract TrafficLamp nextLamp();的定义是为了在RED的创建匿名内部类的时候重写该抽象方法,从而实现具体的功能!
作者: Cheers_for_CRAZ    时间: 2013-12-9 14:48
以下是我对枚举的理解:
首先,枚举是一个特殊的类,当一些元素都具有共有属性时,这时候可以用枚举将其封装,这样就避免定义很多类。
其次,枚举里面的每一个元素都代表一个对象。它们可以有自己的属性。
由于在枚举中定义了一个抽象方法,那么就可以认为这个抽象方法是每一个元素(对象)都具有的。
那么就需要每一个对象都实现这个抽象方法,当然了,里面可以定义各自不同的功能。
作者: 冯晓骏    时间: 2013-12-10 22:00
想你的夜 发表于 2013-12-9 13:48
第一个问题: RED是枚举类TrafficLamp的一个实例对象,而不是你说的什么子类对象:
第二个问题:当一个方法 ...

TrafficLamp应该就是子类对象,父类是带有抽象方法的抽象类,有三个子类,但是都是匿名内部类,RED、YELLOW、GREEN为这些匿名子类的实例对象,你觉得呢




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