黑马程序员技术交流社区

标题: java枚举类不能定义成抽象,为什么却又抽象方法呢? [打印本页]

作者: gzbbxu    时间: 2013-7-2 17:25
标题: java枚举类不能定义成抽象,为什么却又抽象方法呢?
这是为什么?
  1. package com.itcast.zhang;

  2. public  enum TrafficLamp {
  3.         // 子类的对象,每个元素都是由他的子类来写的,必须完成父类的抽象方法。
  4.         RED(30) {
  5.                 @Override
  6.                 public TrafficLamp nextLamp() {
  7.                         // TODO Auto-generated method stub
  8.                         return YELLOW;
  9.                 }
  10.         },
  11.         GREEN(30) {
  12.                 @Override
  13.                 public TrafficLamp nextLamp() {
  14.                         // TODO Auto-generated method stub
  15.                         return YELLOW;
  16.                 }
  17.         },
  18.         YELLOW(10) {
  19.                 @Override
  20.                 public TrafficLamp nextLamp() {
  21.                         // TODO Auto-generated method stub
  22.                         return RED;
  23.                 }
  24.         };
  25.         public abstract TrafficLamp nextLamp();

  26.         private int time;// 希望每个灯都有时间

  27.         private TrafficLamp(int time) {// 通过子类来调用。
  28.                 this.time = time;
  29.         }
  30. }
  31. // 枚举只有一个成员时,就可以作为一种单例的实现方式

复制代码

作者: gzbbxu    时间: 2013-7-2 17:25
为什么却又有抽象方法呢?

作者: gzbbxu    时间: 2013-7-2 17:51
抽象方法必须定义在抽象类中,而枚举类不能是抽象的?这不是矛盾的吗?
作者: j816326    时间: 2013-7-2 18:10
首先是枚举类的定义  枚举类:一个类的对象时有限且固定的,这种实例有限且固定的类。在java里被称为枚举类。
枚举类与普通类的区别:

      1.使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

       2.枚举类的构造器只能用private修饰

      3.枚举类的所有实例必须在枚举类中显示列出,否则枚举类将永远不能产生实例,系统会自动添加public static final修饰
包含抽象方法的枚举类:

枚举类里定义抽象方法时无需显示使用abstract关键字将枚举类定义成抽象类,但因为枚举类需要显示创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出项编译错误
希望帮到你
作者: 黑马龙子    时间: 2013-7-8 19:19
因为枚举类本身就是一个抽象类,这是java本身规定的。





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