黑马程序员技术交流社区
标题:
大家帮忙理解下这下枚举,实在有点糊!
[打印本页]
作者:
左华清
时间:
2012-2-24 15:39
标题:
大家帮忙理解下这下枚举,实在有点糊!
本帖最后由 左华清 于 2012-2-24 19:42 编辑
public enum TrafficLamp{
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;
}
}
enum 相当一个类,RED,GREEN,YELLOW,相当于这个类的三个对象,
然后enum有一个带一个参数的构造函数,能这么理解吗,
抽象方法,内部类这个是怎么回事?
作者:
马胜平
时间:
2012-2-24 15:55
本帖最后由 马胜平 于 2012-2-24 16:02 编辑
枚举里面实例后面的花括号部分实际上就是一个类体部分,在这种情况下当创建枚举值时
并不是直接创建枚举类的实例,而是相当于创建了枚举类的匿名子类的实例,那对花括号是匿名内部类的类体
作者:
雷楚光
时间:
2012-2-24 16:05
本帖最后由 雷楚光 于 2012-2-24 16:07 编辑
你的理解错了。
首先enum 相当一个类,RED,GREEN,YELLOW,相当于这个类的子类三个对象。
因为该类有抽象方法,所以必须用子类继承这个类把它的抽象方法实体化。这样才能建立对象。
再由于enum有私有构造函数,那么它就必须在内部建立类。
于是就有:
1.创建子类,用子类去实体化抽象方法。
2.枚举的必须是对象(枚举的构造函数都是私有的),由于有抽象方法又不能建立自己的对象,那么就必须用子类去继承它,再建立子类的对象。
于是就有:建立子类对象就要把把父类的的抽象方法实体化,而只能在内部建立对象。于是必须用内部类。
作者:
雷楚光
时间:
2012-2-24 16:10
简单点说就是:
1.必须再内部建立对象。
2.建立对象又必须把抽象方法实体化。
所有必须在内部建子类,再建立子类对象。
作者:
dangfei
时间:
2012-2-24 16:21
enum 相当于特殊的类,RED,GREEN,YELLOW相当于TrafficLamp的子类,这三者的实现要调用TrafficLamp的有参构造函数,也要实现TrafficLamp的抽象(abstract) 方法。
作者:
左华清
时间:
2012-2-24 19:41
谢谢各位!
作者:
黄方
时间:
2012-2-25 19:24
enum是一个类,你可以看看API
作者:
黄方
时间:
2012-2-25 21:52
本帖最后由 舞动的心弦 于 2012-2-25 21:53 编辑
public class CollectionForLoop{
enum MySeasonEnum{spring, summer, fall, winter}
public static void main(String[] args) {
for(MySeasonEnum season : MySeasonEnum.values())
{
System.out.println("The season is now " + season);
}
}
}
这个问题和我昨天注册论坛看到的交通灯问题类似!你看看这个例子吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2