黑马程序员技术交流社区
标题:
关于枚举
[打印本页]
作者:
邓超军
时间:
2012-7-17 08:27
标题:
关于枚举
public class AdvJava {
public static void main(String[] args) {
// TODO Auto-generated method stub
new WeekDay(){
};//张老师说枚举是一个特殊的类,那为什么这句语句会报错?
new WeekDay();//这句也不行,为什么?
}
public enum WeekDay{
SUN{
public WeekDay nextDay()
{
return MON;
}
},MON{
public WeekDay nextDay()
{
return SUN;
}
};
public abstract WeekDay nextDay();
private WeekDay(){}
}
}
复制代码
作者:
马林康
时间:
2012-7-17 08:44
枚举的构造函数是私有的肯定不能创建对象了
作者:
田建
时间:
2012-7-17 08:45
因为你在下面定义了一个抽象的nextDay()方法,因而你上面在new WeekDay()的时候必须得实现这个方法!
作者:
陆鹏
时间:
2012-7-17 09:07
public class AdvJava {
public static void main(String[] args) {
// TODO Auto-generated method stub
new WeekDay(){
};
//下面私有了,不能创建对象了。况且枚举的引用不是这样创建对象的。
new WeekDay();
//同上,况且枚举不是这样创建对象的。而是类似于静态的方法,WeekDay.SUN ,这样就是直接创建了一个枚举类型的对象。
}
public enum WeekDay{
SUN{
public WeekDay nextDay()
{
return MON;
}
},MON{
public WeekDay nextDay()
{
return SUN;
}
};
public abstract WeekDay nextDay();
private WeekDay(){} //
你这里已经将空参数构造函数私有了,也就是不能创建对象了。
}
}
建议:感觉楼主基础不太扎实,应复习下基础部分,再看加强。
作者:
孙新强
时间:
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