黑马程序员技术交流社区

标题: 关于枚举抽象方法问题 [打印本页]

作者: 翟宝海    时间: 2013-6-3 18:19
标题: 关于枚举抽象方法问题
在java中,一个类中如果有抽象方法,那么这个类就是抽象类。

  1. public enum TrafficLamp
  2.         {
  3.                 RED{
  4.                         public  TrafficLamp nextLamp()
  5.                         {
  6.                                 return GREEN;
  7.                         }
  8.                 },
  9.                 GREEN{
  10.                         public  TrafficLamp nextLamp()
  11.                         {
  12.                                 return YELLOW;
  13.                         }
  14.                 },
  15.                 YELLOW{
  16.                         public  TrafficLamp nextLamp()
  17.                         {
  18.                                 return RED;
  19.                         }
  20.                 };
  21.                 public abstract TrafficLamp nextLamp();//抽象方法
  22.         }
复制代码
既然枚举也是一个类,为什么它里面有了抽象方法,它不需要被abstract修饰,也成为抽象类呢?
作者: First    时间: 2013-6-3 19:15
因为enum 类 是不能被继承的,也不能new 的,而abstract 修饰 一个类是为了声明,该类需要被继承,不能直接new。
因此如果用abstract 来修饰enum 类,其实就是一种矛盾。
作者: 刘海芳    时间: 2013-6-3 21:01
亲,因为Enum定义的时候就是abstract,在程序开发中,经常用到这种java数据类型,就把enum这个关键字做为特殊的数据类型。在eclipse中,选择enum关键字,在点击电脑右键,进入到enum的源码就会发现你要的秘密了哦。附enum源码
  1. public abstract class Enum<E extends Enum<E>>
  2.         implements Comparable<E>, Serializable {
  3.     /**
  4.      * The name of this enum constant, as declared in the enum declaration.
  5.      * Most programmers should use the {@link #toString} method rather than
  6.      * accessing this field.
  7.      */
  8.     private final String name;

  9.     /**
  10.      * Returns the name of this enum constant, exactly as declared in its
  11.      * enum declaration.
  12.      *
  13.      * <b>Most programmers should use the {@link #toString} method in
  14.      * preference to this one, as the toString method may return
  15.      * a more user-friendly name.</b>  This method is designed primarily for
  16.      * use in specialized situations where correctness depends on getting the
  17.      * exact name, which will not vary from release to release.
  18.      *
  19.      * @return the name of this enum constant
  20.      */
  21.     public final String name() {
  22.         return name;
  23.     }
复制代码





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