黑马程序员技术交流社区

标题: 枚举 的一个问题 [打印本页]

作者: 陈建凡    时间: 2012-2-29 15:51
标题: 枚举 的一个问题
  1. /**
  2.   用普通类来模拟枚举 的实现原理
  3. */

  4. public class EnumDemo
  5. {
  6.   public static void main(String [] args)
  7.   {
  8.           WeekDay weekday=WeekDay.Mon;
  9.     System.out.println(weekday.nextDay());
  10.   
  11.   }

  12. }
  13. /**
  14. 私有的构造方法
  15. 每个元素分别用一个公有的静态成员变量来表示
  16. 可以有若干 公有方法或 抽象方法 ,如要提供nextDay方法必须是抽象的,采用抽象方法
  17. 定义nextDay方法就将大量的if-else语句 转移成一个个 独立的类
  18. */
  19. public abstract  class WeekDay // 这里出现下面图片的错误???
  20. {
  21.         //私有的构造方法
  22.         private WeekDay(){}
  23.         //每个元素分别用一个公有的静态成员变量来表示
  24.         public static final WeekDay Sun=new WeekDay(){
  25.     //匿名内部类也就是子类 来 继承 这个抽象父类 WeekDay               
  26.                         public  WeekDay nextDay()
  27.                         {               
  28.                                  return Mon;
  29.                         }
  30.                
  31.                 };
  32.         public static final WeekDay Mon=new WeekDay(){
  33.                         public  WeekDay nextDay()
  34.                         {               
  35.                                  return Tue;
  36.                         }
  37.                
  38.                 };
  39.         public static final WeekDay Tue=new WeekDay(){
  40.                
  41.                 public  WeekDay nextDay()
  42.                         {               
  43.                                  return Wed;
  44.                         }
  45.                 };
  46.         public static final WeekDay Wed=new WeekDay(){
  47.                 public  WeekDay nextDay()
  48.                         {               
  49.                                  return Thurs;
  50.                         }
  51.                 };
  52.         public static final WeekDay Thurs=new WeekDay(){
  53.                 public  WeekDay nextDay()
  54.                         {               
  55.                                  return Fri;
  56.                         }
  57.                 };
  58.         public static final WeekDay Fri=new WeekDay(){
  59.                 public  WeekDay nextDay()
  60.                         {               
  61.                                  return Sat;
  62.                         }
  63.                 };
  64.         public static final WeekDay Sat=new WeekDay(){
  65.                 public  WeekDay nextDay()
  66.                         {               
  67.                                  return Sun;
  68.                         }
  69.                 };
  70.        
  71.         //可以有若干 公有方法或 抽象方法
  72.         public abstract WeekDay nextDay();
  73.        
  74.          
  75.          public String toString()
  76.          {
  77.                  return null;
  78.          }
  79.        
  80.        
  81. }
复制代码
这个是为啥?

作者: 周峰    时间: 2012-2-29 15:55
你把 public 去掉
  1. abstract class WeekDay // 这里出现下面图片的错误???
  2. {
  3.       //私有的构造方法
  4.       private WeekDay(){}
  5.       //每个元素分别用一个公有的静态成员变量来表示
  6.       public static final WeekDay Sun=new WeekDay(){
  7.   //匿名内部类也就是子类 来 继承 这个抽象父类 WeekDay               
  8.                       public  WeekDay nextDay()
  9.                       {               
  10.                                return Mon;
  11.                       }
  12.               
  13.               };
复制代码

作者: 陈建凡    时间: 2012-2-29 15:57
试过了去掉了public, 主程序输出为null!
作者: 陈建凡    时间: 2012-2-29 15:57
试过了去掉了public, 主程序输出为null!
作者: 周峰    时间: 2012-2-29 15:58
陈建凡 发表于 2012-2-29 15:57
试过了去掉了public, 主程序输出为null!
  1.       //可以有若干 公有方法或 抽象方法
  2.       public abstract WeekDay nextDay();
  3.       
  4.       
  5.        public String toString()
  6.        {
  7.                return null;
  8.        }
复制代码
你自己调用这里返回NULL!
  1.   System.out.println(weekday.nextDay());
复制代码

作者: 周峰    时间: 2012-2-29 16:08
帮你看了你赋值的时候就是null! 输出当然是null  放图给你参考!

作者: 陈建凡    时间: 2012-2-29 16:08
WeekDay weekday=WeekDay.Mon;
System.out.println(weekday.nextDay());
当前是周一,调用nextDay() 方法,输出Tue ;看来是哪里搞错了,再调调,谢谢啦,哈哈
作者: 周峰    时间: 2012-2-29 16:10
陈建凡 发表于 2012-2-29 16:08
WeekDay weekday=WeekDay.Mon;
System.out.println(weekday.nextDay());
当前是周一,调用nextDay() 方法, ...

嗯 没事!~ {:3_53:}




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