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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heheka123 中级黑马   /  2014-4-23 12:56  /  963 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

这是一个老师讲的枚举的例子,枚举类里面有个抽象方法,而在枚举中确要实现这个抽象方法,那是不是就可以看成是枚举就是一个类的子类。而这种形式,是不是可以看成是一个抽象方法的内部类呢,我觉得可以这样理解,不知道有错不

评分

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

查看全部评分

4 个回复

倒序浏览
一旦枚举对象后面加上{},也即你说的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();
        }
}
输出:
绿色
蓝色
黄色
蓝色


评分

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

查看全部评分

回复 使用道具 举报
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。你把枚举理解成一个类的子类好像是不对的
RED、GREEN、YEELON 只是枚举的对象而已, {}里面是内部类的写法
回复 使用道具 举报
应该说你枚举的对象是一个类的子类对象
这样才对吧……
回复 使用道具 举报
你可以这样理解枚举,枚举每个元素都相当于是枚举类的实例,因为枚举一旦建立就会默认的有一个空参数的构造方法,每个元素的后面都默认的有一对( ),这个是调用了空参数的构造方法,这样来看,元素调用了构造方法,是不是就相当于是建立了实例,然后再想实例对象后面添上一对大括号和分号,是不是就是匿名内部类的形式,既然是内部类,实例内部类和创建实例类是不是父与子的关系,当然,父类中的抽象方法,子类中必然要重写,这样理解岂不很是容易,思路也明确。实际上拿一个枚举类去反编译一下,就更加直观,理解起来就会更容易。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马