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

© 潜伏 中级黑马   /  2013-12-9 11:47  /  1603 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();//为什么此类不是抽象的?????抽象成员必须是抽象方法嘛
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

4 个回复

倒序浏览
RED   YELLOW  GREEN 是这个枚举类的对象,对象要使用匿名内部类,就必须要有抽象方法或接口
回复 使用道具 举报
第一个问题: RED是枚举类TrafficLamp的一个实例对象,而不是你说的什么子类对象:
第二个问题:当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,此处的抽象方法 public abstract TrafficLamp nextLamp();的定义是为了在RED的创建匿名内部类的时候重写该抽象方法,从而实现具体的功能!

评分

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

查看全部评分

回复 使用道具 举报
以下是我对枚举的理解:
首先,枚举是一个特殊的类,当一些元素都具有共有属性时,这时候可以用枚举将其封装,这样就避免定义很多类。
其次,枚举里面的每一个元素都代表一个对象。它们可以有自己的属性。
由于在枚举中定义了一个抽象方法,那么就可以认为这个抽象方法是每一个元素(对象)都具有的。
那么就需要每一个对象都实现这个抽象方法,当然了,里面可以定义各自不同的功能。

评分

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

查看全部评分

回复 使用道具 举报
想你的夜 发表于 2013-12-9 13:48
第一个问题: RED是枚举类TrafficLamp的一个实例对象,而不是你说的什么子类对象:
第二个问题:当一个方法 ...

TrafficLamp应该就是子类对象,父类是带有抽象方法的抽象类,有三个子类,但是都是匿名内部类,RED、YELLOW、GREEN为这些匿名子类的实例对象,你觉得呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马