黑马程序员技术交流社区

标题: java 中可以用abstract修饰枚举类吗? [打印本页]

作者: 王溢君    时间: 2013-3-20 02:01
标题: java 中可以用abstract修饰枚举类吗?
枚举类也是一个类,当其中定义了一个抽象的方法时,为什么不用abstract修饰呢?
  1. public enum TrafficLamp {
  2.                 RED(30){

  3.                         @Override
  4.                         public TrafficLamp nextLamp() {
  5.                                 // TODO Auto-generated method stub
  6.                                 return GREEN;
  7.                         }
  8.                        
  9.                 },
  10.                 GREEN(45){

  11.                         @Override
  12.                         public TrafficLamp nextLamp() {
  13.                                 // TODO Auto-generated method stub
  14.                                 return YELLOW;
  15.                         }},
  16.                 YELLOW(5){

  17.                         @Override
  18.                         public TrafficLamp nextLamp() {
  19.                                 // TODO Auto-generated method stub
  20.                                 return RED;
  21.                         }
  22.                                
  23.                         };
  24.                 public abstract TrafficLamp nextLamp();//抽象方法
  25.                 private int time;
  26.                 private TrafficLamp(int time){this.time = time;}
  27.                
  28.         }
复制代码
详细说明一下哈。



作者: Alex shaw    时间: 2013-3-20 08:18
在张孝祥老师关于java加强的视频中,讲到过一个普通的类如何定义成枚举类
  1. public abstract class Day {
  2.        
  3.         private Day() {
  4.         }
  5. /**
  6. * 采用抽象类将大量的ifelse转换成一个个的独立的类
  7. */
  8.                 public static final Day monday = new Day(){
  9.                         @Override
  10.                         public Day nextDay() {
  11.                                 return thusday;
  12.                         }
  13.                 };
  14.                 public static final Day thusday = new Day(){
  15.                         @Override
  16.                         public Day nextDay() {
  17.                                 return null;
  18.                         }
  19.                 }
  20.         public Day getDay()
  21.         {
  22.                 if(this == monday)
  23.                 {
  24.                         return monday;
  25.                 }else
  26.                 {
  27.                         return thusday;       
  28.                 }
  29.         }
  30.         public String toString()
  31.         {
  32.                 return null;
  33.         }
  34.         public abstract Day nextDay();
  35. }
复制代码
其实枚举本质上就是一个抽象类,并且实例固定,构造函数固定,没法重新创建实例对象
建议你看下张孝祥老师关于java加强中枚举类的介绍 你就会明白了




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