黑马程序员技术交流社区

标题: 带抽象方法的枚举 [打印本页]

作者: 菠萝鱼    时间: 2014-2-15 22:17
标题: 带抽象方法的枚举
public enum Tra{
        RED(3){
        public Tra nextLamp(){return GREEN;}       
                },
        GREEN(4){
        public Tra nextLamp(){return YELLOW;}               
                },       
        YELLOW(5){
        public Tra nextLamp(){return RED;}                       
                };
        public abstract Tra nextLamp();//抽象方法
        private int time;
        private Tra(int time){this,time=time;}//带参数的构造函数
}
这个枚举类  定义了三个Tta类型的属性 RED,GREEN,YELLOW,后面大括号里的抽象方法应该怎么理解?


作者: 李金中    时间: 2014-2-15 23:48
父类有抽象方法,肯定是等着子类重写属于自己的该方法。
对于上述代码来说,个人理解,应该是三个属性通过类似于实现接口的形式,重写了各自的nextLamp方法,以获取不同的返回值。
作者: ↑↓ME→←    时间: 2014-2-16 12:56
改为匿名类,每个颜色对象,后面实现抽象类的抽象方法,颜色后面的数字是传给构造函数用的!
作者: 徐青松    时间: 2014-2-16 13:58
枚举中定义了三个属性,对于这三个属性来说可以理解成子类的对象,枚举可以理解成一个类class,这个类有抽象方法,需要子类重写实现该抽象方法。而该对象只需要实现且只使用一次该方法,所以采用了匿名类的方式,将该抽象方法重写了各自的nextLamp方法,以获取不同的返回值。我是这样理解的。
作者: 菠萝鱼    时间: 2014-2-16 20:45
只要枚举类型 中含有抽象方法,定义属性时就必须实现这个抽象方法。理解为子类对象必须重写父类抽象方法。
作者: lgqioi    时间: 2014-2-16 21:57
RED,GREEN,YELLOW这些元素是由Tra的子类实现的
作者: 一年_Hei    时间: 2014-2-16 22:37
枚举就相当一个特殊的java类,它的构造方法的权限为私有。而枚举的每个元素就相当于这个类的实际对象。如果这个枚举有抽象方法。那么必须实现这个抽象方法才能创造它的实例对象。因为枚举的元素就是它的实例对象,所以必须通过匿名内部类的方式重写枚举的抽象方法
作者: 唐志海    时间: 2014-2-17 11:38
枚举的每个元素都是它的实例对象,那后天的大括号里面的内容就是该对象实现其抽象方法




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