--------android培训java培训期待与您交流------
所谓的枚举,其本质还是一个Java类(编译后的文件是.class结尾),或
者说是一个特殊的Java类;
他的构造函数是私有的,默认覆盖了toString方法,因此他的成员名就是
toString的返回值;
特殊情况:如果他只有一个成员就是一个单例设计模式;
同时既然他是一个特殊的java类,就应该具有Java类级别的一些特性;
代码示例:
public enum TrafficLamp {
RED(30) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
YELLOW(5) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
},
GREEN(45) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
};
private int time;
private TrafficLamp() {
}
private TrafficLamp(int time) {
this.time = time;
}
public abstract TrafficLamp nextLamp();
}
------------------------------------------------------------------------------------------------
public enum TrafficLamp{上面这个是 了一个默认构 函数的注解,没有抽象方法;应该很容易看懂;
-----------------------------------------------------------------------------------------------
这个枚举 了个成员变量time,和重载的有参构 函数, 为我们说过枚举是一个特殊的java类,那么他就应该具有Java类级别的特性,
成员变量和重载的构 函数当然也可以了
-----------------------------------------------------------------------------------------------------
public abstract class TrafficLamp {
public static final TrafficLamp RED=new TrafficLamp(){
}
上面这个是一个抽象类,但是抽象类中定义了该类的匿名子类实例对象;如果你对匿名内部类熟悉的话,估计一看就懂;
然后你把上面三个东西合起来看估计就融会贯通了。
------------------------------------------------------------------------------------------------------
想必到这了 应该能看懂最上面那一大块代 了吧,是的他是一个抽象的枚举,有一个抽象方法nextLamp;而定义枚举的成员时我们使用到了匿名内部类,也就是说RED后面的那个{}其实表示的是声明了一个TrafficLamp的一个子类(不知道可不可以这 称呼,先凑合着吧),覆盖父类的抽象方法;