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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜鹏云 中级黑马   /  2012-8-22 17:17  /  1560 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class EnumTest_6 {
public static void main(String[] args) {
  System.out.println(TrafficLamp.RED);//当执行TrafficLamp.RED 时编译器具体做了些什么?
System.out.println(TrafficLamp.GREEN);
  System.out.println(TrafficLamp.YELLOW);
}
public enum TrafficLamp {//如果TrafficLamp本身是一个类的话,那么 RED,Green,YELLOW又是什么呢,他们和TrafficLamp是什  么关系呢?
  RED(30) {
   public TrafficLamp nextLamp() {
  // nextLamp()这个函数怎么调运,他和 RED是怎么一个关系
    return GREEN;
   }
  },
  GREEN(45) {
   public TrafficLamp nextLamp() {
    return YELLOW;
   }
  },
  YELLOW(5) {
   public TrafficLamp nextLamp() {
    return RED;
   }
  };
  
  public abstract TrafficLamp nextLamp();这行代码有何作用,而且为何要定义成抽象的呢?,而且注释掉 ,没有影响!
  private int time;
  private TrafficLamp(int time) {
   this.time = time;
  }
}
}

评分

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

查看全部评分

2 个回复

倒序浏览
1.当执行TrafficLamp.RED,就生成了枚举类的所有元素,RED GREEN YELLOW

2. 枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,这些对象也可以看做是一个常量,一个类,它们都是enum的子类

3.nextLamp()这个函数怎么调运,他和 RED是怎么一个关系:nextLmap通过枚枚举的实例来调用,是实现了枚举类TrafficLamp的抽象方法;这个函数就是RED类的一个方法

4.TrafficLamp中的抽象类nextLamp(),定义成抽象应该是一种声明,说明它的实例有这个方法,并且每个实例都必须要实现这个方
如果注释掉,就不是每个枚举实例都要实现这个方法,在操作用就可能引发错误,因为你不知道枚举内部那些实例有这个方法




回复 使用道具 举报
1.当执行TrafficLamp.RED 时编译器具体做了些什么?
编译器调用了TrafficLamp这个枚举的RED元素,并自动实现toString方法。
2.如果TrafficLamp本身是一个类的话,那么 RED,Green,YELLOW又是什么呢,他们和TrafficLamp是什  么关系呢?
(1)如果TrafficLamp中没有抽象方法,那么RED,Green,YELLOW就是TrafficLamp的实例对象。
(2)如果TrafficLamp中有抽象方法,那么TrafficLamp不能直接实例化,只有实现了该抽象方法的子类才能实例化,此时RED,Green,YELLOW就是TrafficLamp子类的实例对象。
他们和TrafficLamp就是类与对象的关系,抽象与具体的关系。
3. nextLamp()这个函数怎么调运,他和 RED是怎么一个关系。
灯之间的交替关系是联系实际,先确定下来。RED——>GREEN——>YELLOW——>RED这样循环往复。然后通过程序来实现。这个问题,可是使用If——else语句来完成,但这样很麻烦,就用抽象方法 public abstract TrafficLamp nextLamp();来代替,它将大量的if-else语句变成一个个独立的类封装到每个元素中,使结构清晰,易于理解。
4.  public abstract TrafficLamp nextLamp();这行代码有何作用,而且为何要定义成抽象的呢?,而且注释掉 ,没有影响!
作用:它将大量的if-else语句变成一个个独立的类封装到每个元素中,使结构清晰,易于理解。同时这也使用了多态技术,调用时只与基类接口通信,提高程序的扩展性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马