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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 快乐的黑马 中级黑马   /  2014-1-7 20:09  /  860 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在一般类中,如果有abstract这个修饰方法,那么类也要用abstract修饰。如:
public abstract class Test()
{
      public abstract void show();
}
但今天我在看枚举时,里面定义了抽象方法,而类去不用abstract修饰,这是为为什么?代码如下:
public class Test
{
      public enum TrafficLamp{
       RED,GREEN,YELLOW;
       public abstract TrafficLamp nextLamp();
      }
}

3 个回复

倒序浏览
楼主可以这样理解,枚举他是一种独立的形式,他和类、接口是并列的。你看接口里也都是抽象方法啊,但是我们定义一个接口也不需要在interface关键词前面加abstract.
回复 使用道具 举报
public class Test
{
      public enum TrafficLamp{
       RED,GREEN,YELLOW;
       public abstract TrafficLamp nextLamp();
      }
}
在这里,枚举是Test类中的内部类形式存在。抽象方法不是test类的成员方法
回复 使用道具 举报
楼主应该是看的这段代码吧?你既然定义了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.         }
复制代码





回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马