黑马程序员技术交流社区

标题: 枚举,我这样理解对吗? [打印本页]

作者: heheka123    时间: 2014-4-23 12:56
标题: 枚举,我这样理解对吗?
  1. public class EnumDemo {       
  2.         public static void main(String[] args){
  3.                 Lamp lp = Lamp.RED;
  4.                 System.out.println(lp.nextLamp());       
  5.         }
  6.         public enum Lamp{
  7.                 RED {
  8.                         @Override
  9.                         public Lamp nextLamp() {
  10.                                 return GREEN;
  11.                         }
  12.                 },GREEN {
  13.                         @Override
  14.                         public Lamp nextLamp() {
  15.                                 return YELLOW;
  16.                         }
  17.                 },YELLOW {
  18.                         @Override
  19.                         public Lamp nextLamp() {
  20.                                 return RED;
  21.                         }
  22.                 };
  23.                 public abstract Lamp nextLamp();
  24.         }
  25. }
复制代码

这是一个老师讲的枚举的例子,枚举类里面有个抽象方法,而在枚举中确要实现这个抽象方法,那是不是就可以看成是枚举就是一个类的子类。而这种形式,是不是可以看成是一个抽象方法的内部类呢,我觉得可以这样理解,不知道有错不
作者: 한숨짓다    时间: 2014-4-24 00:46
一旦枚举对象后面加上{},也即你说的RED、GREEN、YEELON,那么该对象实际是枚举匿名内部类对象;你把枚举理解成一个类的子类有点牵强。举个例子来让你对枚举有更深的了解:

//定义一个肤色的枚举
enum Color{
     Green,Blue,Yellow;
     //这里重写了Enum中的toString()方法返回枚举常量的名称,它包含在声明中。
       
     @Override
     public String toString() {
     String ret = super.toString();
     switch (this) {
     case Green:
     ret = "绿色";
     break;
                       
     case Blue:
     ret = "蓝色";
     break;
                       
     case Yellow:
     ret = "黄色";
     break;
     default:
     break;
                }
               
    return ret;
        }
       
}
class Personp{
     Color c = Color.Blue;
     void show(){
    System.out.println(c);
        }
}
public class Demo18 {
     public static void main(String[] args) {
     Color []color = Color.values();//所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象;
     for (Color c : color) {//1.5后增强for循环
         System.out.println(c);
        }
    new Personp().show();
        }
}
输出:
绿色
蓝色
黄色
蓝色



作者: ﹊佑雨时杰↘    时间: 2014-4-24 05:05
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。你把枚举理解成一个类的子类好像是不对的
RED、GREEN、YEELON 只是枚举的对象而已, {}里面是内部类的写法

作者: 织语不如书    时间: 2014-4-24 11:38
应该说你枚举的对象是一个类的子类对象
这样才对吧……
作者: eternallove    时间: 2014-4-24 22:01
你可以这样理解枚举,枚举每个元素都相当于是枚举类的实例,因为枚举一旦建立就会默认的有一个空参数的构造方法,每个元素的后面都默认的有一对( ),这个是调用了空参数的构造方法,这样来看,元素调用了构造方法,是不是就相当于是建立了实例,然后再想实例对象后面添上一对大括号和分号,是不是就是匿名内部类的形式,既然是内部类,实例内部类和创建实例类是不是父与子的关系,当然,父类中的抽象方法,子类中必然要重写,这样理解岂不很是容易,思路也明确。实际上拿一个枚举类去反编译一下,就更加直观,理解起来就会更容易。




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