黑马程序员技术交流社区
标题:
枚举问题
[打印本页]
作者:
罗海云
时间:
2013-2-23 16:04
标题:
枚举问题
本帖最后由 罗海云 于 2013-2-23 21:06 编辑
public enum TrafficLamp
//RED,GRREN<FONT color=red>难道就相当于new了一个吗?></FONT>
{
RED(30){ public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
复制代码
/*就是想问下这个RED,GREEN...是不是一定义就相当于new TrafficLamp对象.......
还有
为什么枚举类里面可以创建抽象类呢?枚举类相当于是什么呢? 说下原理,谢谢.*/
都整蒙圈了
作者:
汪平乐
时间:
2013-2-23 17:59
....{:soso_e120:}....
作者:
王晓楠
时间:
2013-2-23 18:14
package enumtest;
public class EnumDemo {
/**
* 关于枚举。
* @param args
*/
public static void main(String[] args) {
System.out.println(enu.A.getClass());
}
}
enum enu {
A, B, C, D;
}
输出:class enumtest.enu
复制代码
说明A是一个对象,它的字节码文件是class enumtest.enu,还有枚举enu定义在了class EnumDemo{}外,也就说明enu是一个类,enu会在像类一样加载,A,B,C,D是这个类的实例。
package enumtest;
public class EnumDemo {
/**
* 关于枚举。
*
* @param args
*/
public static void main(String[] args) {
System.out.println(enu.A.getClass());
System.out.println(enu.A.getClass().getSuperclass());
}
}
enum enu {
A {
void method() {
System.out.println("A");
}
},
B {
void method() {
System.out.println("A");
}
},
C {
void method() {
System.out.println("A");
}
},
D {
void method() {
System.out.println("A");
}
};
abstract void method();
}
输出:class enumtest.enu$1
class enumtest.enu
复制代码
既然enu是类,可以定义它为抽象类,那么它的实例就必须要实现它的抽象方法,但是抽象方法不能被实例化,那么A,B,C,D用匿名内部类来了个实例化。所以输出它的字节码类为class enumtest.enu$1,字节码的父类为 class enumtest.enu。总之,就把枚举 enu的成员看成它的实例就ok了,当enu是抽象时,成员看成enu子类的实例,只不过这个子类在其内部!偶了!
作者:
吴硕
时间:
2013-2-23 18:47
本帖最后由 吴硕 于 2013-2-23 18:53 编辑
其中的RED、GREEN可以理解为new TrafficLamp,其实是在创建TrafficLamp的实例,而在例子中,使用了带参的构造函数,并实现了抽象方法
枚举类是一种特殊的类。
首先枚举类是一种类,其他类可以有的,枚举类也可以有
但枚举类又是特殊的,特殊之处在于:
使用enum定义的枚举默认继承了java.lang.Enum类,Enum类实现了Comparabel, Serializable接口
枚举类的构造器只能使用private修饰
枚举类的所有实例都必须在枚举类中显示列出,否则这个枚举类将不能产生实例,并会自动添加public static final修饰符修饰这些实例
枚举类就是这样的一个特殊类
作者:
罗海云
时间:
2013-2-23 20:02
谢谢楼上两位生动的解答, 我在仔细去研究去了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2