黑马程序员技术交流社区

标题: 有关枚举的疑问 [打印本页]

作者: 快乐的黑马    时间: 2014-1-7 20:09
标题: 有关枚举的疑问
在一般类中,如果有abstract这个修饰方法,那么类也要用abstract修饰。如:
public abstract class Test()
{
      public abstract void show();
}
但今天我在看枚举时,里面定义了抽象方法,而类去不用abstract修饰,这是为为什么?代码如下:
public class Test
{
      public enum TrafficLamp{
       RED,GREEN,YELLOW;
       public abstract TrafficLamp nextLamp();
      }
}
作者: 马富林    时间: 2014-1-7 21:56
楼主可以这样理解,枚举他是一种独立的形式,他和类、接口是并列的。你看接口里也都是抽象方法啊,但是我们定义一个接口也不需要在interface关键词前面加abstract.
作者: 午夜b'Boy    时间: 2014-1-7 22:08
public class Test
{
      public enum TrafficLamp{
       RED,GREEN,YELLOW;
       public abstract TrafficLamp nextLamp();
      }
}
在这里,枚举是Test类中的内部类形式存在。抽象方法不是test类的成员方法
作者: 松毛    时间: 2014-1-7 22:38
楼主应该是看的这段代码吧?你既然定义了nextLamp方法为抽象方法,那么它的对象肯定要覆盖该抽象方法,不然的话编译是通不过的。你应该没有看完老师后面的代码吧。
  1. public enum TrafficLamp{
  2.                 RED {
  3.                         @Override
  4.                         public TrafficLamp nextLamp() {
  5.                                 // TODO Auto-generated method stub
  6.                                 return null;
  7.                         }
  8.                 },GREEN {
  9.                         @Override
  10.                         public TrafficLamp nextLamp() {
  11.                                 // TODO Auto-generated method stub
  12.                                 return null;
  13.                         }
  14.                 },YELLOW {
  15.                         @Override
  16.                         public TrafficLamp nextLamp() {
  17.                                 // TODO Auto-generated method stub
  18.                                 return null;
  19.                         }
  20.                 };
  21.                 public abstract TrafficLamp nextLamp();
  22.         }
复制代码










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