黑马程序员技术交流社区
标题:
枚举enum中的抽象方法。
[打印本页]
作者:
皮卫凯
时间:
2012-9-20 15:37
标题:
枚举enum中的抽象方法。
本帖最后由 皮卫凯 于 2012-9-20 16:19 编辑
public enum TrafficLamp{
RED(30){ // 1
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp(); // 2
private int time;
private TrafficLamp(int time){this.time = time;}
}
1、RED,GREEN,YELLOW 这可以理解是enum的3个元素么
RED{ },GREEN{ },YELLOW{ } RED{ } 可以理解为 enum 的内部类么
RED( ){ },GREEN( ){ },YELLOW( ){ } RED( ){ } 怎么搞。。。。
2、2处定义了一个抽象的方法,那么enum 类前面不也要加上abstract 作为抽象类么。从这里是不是可以看出enum不是一个类。
作者:
AngieFans85
时间:
2012-9-20 15:56
"1、RED,GREEN,YELLOW 这可以理解是enum的3个元素么
RED{ },GREEN{ },YELLOW{ } RED{ } 可以理解为 enum 的内部类么
RED( ){ },GREEN( ){ },YELLOW( ){ } RED( ){ } 怎么搞。。。。"
RED,GREEN,YELLOW可以理解为TrafficLamp的一个元素,其实他们是TrafficLamp的具体的一个实例.
RED{ },GREEN{ },YELLOW{ }是调用枚举TrafficLamp的默认无参的构造方法.
RED( ){ },GREEN( ){ },YELLOW( ){ }是调用枚举TrafficLamp的有参构造方法.
"2、2处定义了一个抽象的方法,那么enum 类前面不也要加上abstract 作为抽象类么。从这里是不是可以看出enum不是一个类"
enmu就是一个类,enum默认继承Enum类.
给一个枚举定义抽象方法,那么枚举中的每个实例都要实现该抽象方法.
作者:
夏天
时间:
2012-9-20 16:03
本帖最后由 夏诗瑶 于 2012-9-20 16:04 编辑
针对你的问题,其实我阅读的时候也有类似的问题,我的理解是这样的。
1、RED,GREEN,YELLOW
// 这就是你所枚举的TrafficLamp的三个元素!!
RED{ },GREEN{ },YELLOW{ }
// 理解为子类对象更好,其实内部类就是子类对象
RED( ){ },GREEN( ){ },YELLOW( ){ }
//因为是子类对象,对象初始化的时候可以有参数。所以可以是 RED( ){ }//而且,这些都是枚举的特点,就是这个技术的格式,不用去问为什么是这样的。
2、2处定义了一个抽象的方法。
抽象方法只能存在于抽象类中,因为枚举是不能动态实例化对象,所以你可以把枚举看成是抽象类。
实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 经继承了 java.lang.Enum(java是单一继承)。
这是通过反编译看到的部分代码
public class cn.itcast.test.EnumTest extends java.lang.Enum{
public static final
cn.itcast.test.EnumTest MON;//默认都是
公共静态最终
的
public static final cn.itcast.test.EnumTest TUE;
public static final cn.itcast.test.EnumTest WED;
作者:
皮卫凯
时间:
2012-9-20 16:09
谢谢各位解答,我已明了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2