黑马程序员技术交流社区

标题: 关于枚举 [打印本页]

作者: 邓超军    时间: 2012-7-17 08:27
标题: 关于枚举
  1. public class AdvJava {
  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.         new WeekDay(){
  5.                
  6.         };//张老师说枚举是一个特殊的类,那为什么这句语句会报错?
  7.         new WeekDay();//这句也不行,为什么?
  8.         }

  9.         public enum WeekDay{
  10.                 SUN{
  11.                         public WeekDay nextDay()
  12.                         {
  13.                                 return MON;
  14.                         }
  15.                 },MON{
  16.                         public WeekDay nextDay()
  17.                         {
  18.                                 return SUN;
  19.                         }
  20.                 };
  21.                 public abstract WeekDay nextDay();
  22.                 private WeekDay(){}
  23.         }
  24. }
复制代码

作者: 马林康    时间: 2012-7-17 08:44
枚举的构造函数是私有的肯定不能创建对象了
作者: 田建    时间: 2012-7-17 08:45
因为你在下面定义了一个抽象的nextDay()方法,因而你上面在new WeekDay()的时候必须得实现这个方法!
作者: 陆鹏    时间: 2012-7-17 09:07

作者: 孙新强    时间: 2012-7-17 09:16
枚举是一个特殊的类,因为他本身的构造方法是私有的,导致我们不能new实例化对象,
枚举中每个元素都是对象
并且制定好了元素的取值范围
作者: 邓超军    时间: 2012-7-17 09:25
//下面私有了,不能创建对象了。况且枚举的引用不是这样创建对象的。

我想说的是,即使不私有,也不行。而且,我感觉大家都没有回答到关键点:为什么枚举与一般的类不同?
作者: 王飞    时间: 2012-7-17 09:49
public class Test2 {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
        //new WeekDay(){
               
        };//张老师说枚举是一个特殊的类,那为什么这句语句会报错?   这里的的都好是中文的 改了就OK
       // new WeekDay();//这句也不行,为什么?  个么,枚举类不能new对象的,因为他里面的构造方法是私有的,只能通过类名调用里面的成员
      
       例如:WeekDay w = WeekDay.SUN;
        WeekDay w = WeekDay.MON;就OK了
        此时返回的就是WeekDay 类型的对象

        
         枚举类之所以与一般的类不同,是因为他的构造方法是私有的
         ,里面的每个元素都是WeekDay的实例对象,也就是说枚举里面定义好了一些实例对象,要用这个枚举类的对象就只能是这个枚举类里面据有的元素(每个元素都是这个枚举类实例后的对象)

      
         枚举类里面的元素都是通过类名直接调用的,因为枚举类里面的元素默认都是public static final的

        }

        public enum WeekDay{
                SUN{
                        public WeekDay nextDay()
                        {
                                return MON;
                        }
                },MON{
                        public WeekDay nextDay()
                        {
                                return SUN;
                        }
                };
                public abstract WeekDay nextDay();
                private WeekDay(){}
        }
}




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