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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 思维 高级黑马   /  2014-8-12 23:03  /  1850 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 思维 于 2014-8-17 09:07 编辑

求问:为什么带抽象方法的枚举类enum前面不能用abstract修饰?
  1. public class EnumTest1{
  2.         public static void main(String[] args){
  3.                 TrafficLamp red = TrafficLamp.RED;
  4.                 System.out.println(red.nextLamp());
  5.                 System.out.println("时间:"+red.time);
  6.         }
  7.         public enum TrafficLamp{
  8.                 //REN(){...},GREEN(){...},YELLOW()[...};
  9.                 RED(30){
  10.                         public TrafficLamp nextLamp(){
  11.                                 return GREEN;
  12.                         }
  13.                 },
  14.                 GREEN(45){
  15.                         public TrafficLamp nextLamp(){
  16.                                 return YELLOW;
  17.                         }
  18.                 },
  19.                 YELLOW(5){
  20.                         public TrafficLamp nextLamp(){
  21.                                 return RED;
  22.                         }
  23.                 };
  24.                 public abstract TrafficLamp nextLamp();
  25.                 private int time;
  26.                 private TrafficLamp(int time){this.time = time;}
  27.         }
  28. }
复制代码

8 个回复

倒序浏览
顶一个!~!!
回复 使用道具 举报
public abstract TrafficLamp nextLamp()在每个枚举的元素中不是都实现了吗?抽象类没实现抽象方法,直接抛给调用者去实现。而且,照你这样想,接口里面也有抽象方法,为什么接口前面没有加abstract?
回复 使用道具 举报 1 0
爱思考的好孩子
回复 使用道具 举报
a6511631 发表于 2014-8-13 10:42
public abstract TrafficLamp nextLamp()在每个枚举的元素中不是都实现了吗?抽象类没实现抽象方法,直接抛 ...

主要是这个类中每个枚举元素也被实现了,但是类名前有abstract啊?
  1. public abstract class WeekDay{
  2.         //单例设计模式
  3.         private WeekDay(){}
  4.         public abstract WeekDay nextDay();
  5.         public final static WeekDay SUN = new WeekDay(){
  6.                 public WeekDay nextDay(){
  7.                         return MON;
  8.                 }
  9.         };
  10.         public final static WeekDay MON = new WeekDay(){
  11.                 public WeekDay nextDay(){
  12.                         return SUN;
  13.                 }
  14.         };
  15.         public String toString(){
  16.                 return this == SUN?"SUM":"MON";
  17.         }
  18. }
复制代码
回复 使用道具 举报
你的构造方法是私有的,也就是说不能被其他类继承(本来抽象类就不能被继承),你再写个抽象方法,我觉得没啥意义
回复 使用道具 举报
谢谢楼主分享 学习了
回复 使用道具 举报
思维 高级黑马 2014-8-15 18:24:31
8#
杨庆雷 发表于 2014-8-13 12:14
你的构造方法是私有的,也就是说不能被其他类继承(本来抽象类就不能被继承),你再写个抽象方法,我觉得没 ...

私有构造方法虽然不能被继承,但是抽象方法可以自我实现,保证元素的唯一性啊;P
回复 使用道具 举报
思维 发表于 2014-8-15 18:24
私有构造方法虽然不能被继承,但是抽象方法可以自我实现,保证元素的唯一性啊 ...

至于为什么不能加abstract,我有一个帖子http://bbs.itheima.com/thread-137234-1-1.html
之前不怎么懂  但这次不会被嘲笑了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马