黑马程序员技术交流社区

标题: 枚举中抽象问题? [打印本页]

作者: py强子    时间: 2013-8-4 10:11
标题: 枚举中抽象问题?
如果一个枚举中有抽象方法,
那么这个枚举需要抽象吗?
public enum TrafficLamp
{
      RED, GREEN,  YELLOE;
       public abstract TrafficLamp nextLamp();
}

作者: 吴光新    时间: 2013-8-4 10:27
在我的印象中是不需要的
作者: 天地有我    时间: 2013-8-4 12:08
本帖最后由 天地有我 于 2013-8-4 12:12 编辑

枚举类型中是可以定义抽象方法的,首先要清楚枚举类,枚举类比较特殊,枚举类中定义的每一个属性(默认是 public final static )都是枚举类型的一个实例(对象),而枚举类就是Class,是一个不可以被继承的final类,所以枚举类型既不可以被继承,也不可以被实现。但是枚举类和其它类一样可以继承普通类,抽象类,实现接口。所以当在枚举类中定义了抽象方法,而一个抽象类中的抽象方法必须被子类所复写,而枚举类不能被继承,但是枚举类中的每一属性都是枚举类的一个对象,所以在枚举类中定义了抽象方法的话,必须要在枚举类中的属性中复写定义在枚举类中的抽象方法。

public enum TrafficLamp
{
        RED
        {
                public TrafficLamp nextLamp()
                {
                        return RED;
                }
        },
        GREEN
        {
                public TrafficLamp nextLamp()
                {
                        return GREEN;
                }
        },
        YELLOE
        {
                public TrafficLamp nextLamp()
                {
                        return YELLOE;
                }
        };
        public abstract TrafficLamp nextLamp();
        
        //测试
        public static void main(String[] args)
        {
                System.out.println(TrafficLamp.GREEN.nextLamp());
        }
}

程序运行结果为,方法返回值:GREEN
作者: py强子    时间: 2013-8-4 12:23
天地有我 发表于 2013-8-4 12:08
枚举类型中是可以定义抽象方法的,首先要清楚枚举类,枚举类比较特殊,枚举类中定义的每一个属性(默认是 pu ...

够详细,谢啦!
作者: 天地有我    时间: 2013-8-4 12:29
没事,大家相互交流共同进步。
作者: 杨丽静    时间: 2014-1-23 21:52
天地有我 发表于 2013-8-4 12:08
枚举类型中是可以定义抽象方法的,首先要清楚枚举类,枚举类比较特殊,枚举类中定义的每一个属性(默认是 pu ...

但是枚举类和其它类一样可以继承普通类,抽象类,实现接口。貌似不正确吧枚举类默认继承java.lang.Enum类,又java不支持多继承所以不能继承吧




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