黑马程序员技术交流社区
标题:
关于枚举的一个小问题
[打印本页]
作者:
赵永康
时间:
2012-9-17 17:38
标题:
关于枚举的一个小问题
当在枚举类中定义了带有参数的构造方法,此时枚举类还有默认的无参构造方法吗??
带有抽象方法的枚举,当枚举元素去实现时候,枚举元素相当于一个匿名内部类吗??枚举元素和枚举名称此时级别是什么的?估计大家不明白意思,看张老师代码
public enum TrafficLamp
{
RED(90){public TrafficLamp next(){return GREEN}};,YELLOW(3){public TrafficLamp next(){ return RED};},GREEN(60){public TrafficLamp next(){return YELLOW};};
private TrafficLamp(int time){this.time=time}
private int time
public abstract TrafficLamp next();
}
在这个枚举中还有无参数的构造方法吗??当我把写成RED{public TrafficLamp next(){return GREEN};}编译能不能通过??
RED GREEN YELLOW 是相当于一个匿名内部类吗??他们是TrafficLamp的元素----即实例对象,那么此时他们和TrafficLamp在级别上是什么关系??
作者:
史小兵
时间:
2012-9-17 19:23
注意枚举类其实也是一个类,因此其一样可以在里边定义成员和方法。
在上边的代码中包含了RED,YELLOW,Green三个匿名内部类,当你编译时你会看到,多出来的三个class文件。还定义了一个私有的成员time,和一个抽象的方法next();
虽然上边定义的枚举元素含有参数,但是其无参的构造器还是存在的。比如说:
public enum Gender
{
//此处的枚举值必须调用对应构造器来创建
MALE("男"),FEMALE("女");
private final String name;
//枚举类的构造器只能使用private修饰
private Gender(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
其实在枚举中中列出枚举值时就是就是调用构造器创造枚举对象,只是无需new关键字,也不需要现实的调用构造器。前面列出枚举值时无需传入参数甚至无需使用括号,就是因为枚举类包含无参构造器。
作者:
赵永康
时间:
2012-9-17 23:57
史小兵 发表于 2012-9-17 19:23
注意枚举类其实也是一个类,因此其一样可以在里边定义成员和方法。
在上边的代码中包含了RED,YELLOW,Green ...
谢谢 明白啦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2