黑马程序员技术交流社区
标题:
关于enum类的问题
[打印本页]
作者:
郭军亮
时间:
2013-4-26 11:31
标题:
关于enum类的问题
下面这个程序中,RED,GREEN,YELLOW这些是enum的子类还是enum的对象啊,我一直看不懂这个问题。请各位详解一下。。。。谢谢了
public class EnumTest {
public static void main(String[] args) {
}
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;}
}
}
作者:
乘鱼飞
时间:
2013-4-26 11:46
本帖最后由 乘鱼飞 于 2013-4-26 12:09 编辑
是enum的子类,实现抽象方法
枚举:可认为是实例已经固定的类。
枚举类可以有属性、方法、私有化构造器、初始化块、内部类。
枚举类的格式:
[修饰符] enum 枚举名
{
//第一行该枚举的所有的实例
}
枚举的修饰符中abstract,final两者选其一,
如果枚举中已经有了抽象方法,该枚举默认由abstract修饰,
此时该枚举没有final修饰,
此时枚举类是一个抽象类,不能被实例化,
只能实例化它的子类,通过匿名内部类来实现抽象类(如:RED)。
哎,真纠结啊
作者:
932759732
时间:
2013-4-26 11:51
他原本是 public enum TrafficLamp{
RED,GREEN,YELLOW;
}
这样的,其中的每一个都是枚举的一个实例对象。
写成上面那种模式是为枚举的实例对象传入了构造时所需的参数和覆盖了抽象的方法。
他是一个比较特殊的类,但是也还是类。
作者:
郭军亮
时间:
2013-4-26 14:28
那么请问那个RED,GREEN,YELLOW到底是子类还是对象呢?
作者:
wudongzhe
时间:
2013-4-26 17:11
RED,GREEN,YELLOW 相当于本类的对象 如果在枚举中创建抽象方法 那就相当于不能实例化对象只能创建子类对象
作者:
wudongzhe
时间:
2013-4-26 17:14
你可以模拟一个枚举就知道了 在本类中new一个本类的对象 然后在创建 抽象方法 这时候就提示不能创建对象了
作者:
HM王琦
时间:
2013-4-26 17:45
在以上的程序中,RED,GREEN,BLUE是枚举类TrafficLampd的三个对象,因为此枚举类中有抽象方法,所以在创建对象时复写了抽象方法。它们是匿名内部内的形式创建的,说白了就是一个对象;
作者:
黄玉昆
时间:
2013-4-27 20:11
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2