枚举的作用:限定“数据集”中的元素的个数(将类理解为一个集合)、即限定枚举类对象的个数。
枚举类与普通类的区别:
1.枚举类也是类,也可以有自己的成员变量,成员方法,静态方法、静态变量等,也能实现其他的接口,不能继承其他类了(因为已经继承了java.lang.Enum)。
2.枚举类与普通类的不同在于,它的构造器私有,这也决定了它如果需要被继承时的特殊性。若果其它的外部类A继承它,由于在构造类A的对象时,需要调用父类的构造方法,由于枚举类的构造器私有,所有无法调用,导致枚举类不可以被其它的外部类继承。但是有没有办法去继承它愣?答案是有的,那就需要用到内部类了(内部类能访问外部类的任何成员,当然能访问已被私有的构造器了)。
例子:简单模拟下交通灯*********************************************
public enum TrafficLamp {
//由于枚举值默认式public,final,static,按照规范变量名全部大写
//正是由于枚举值的这一特性,为我们实现单列提供了一种很好的方案
//注意此时的枚举值都是引用,相当于public static final TrafficLamp RED = new //TrafficLamp();
RED{//匿名内部类,RED指向继承了TrafficLamp的子类对象,以下同理
public TrafficLamp state(){
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return GREEN;
}
},GREEN{
public TrafficLamp state(){
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return YELLOW;
}
},YELLOW{
public TrafficLamp state(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return RED;
}
};
private TrafficLamp(){}
private TrafficLamp(int time){
}
public abstract TrafficLamp state();
//简单的模拟
public static void main(String[] args) {
Boolean flag=true;
While(flag){
RED.state().state().state();
}
}
******************************************************************************
在本文中,讨论了如何继承枚举类,并对一些问题作出了解释,若需要了解Enum类的一些使用方法,建议查阅博客:
http://blog.sina.com.cn/s/blog_4adc4b090101dtxp.html
由于本人水平所限,难免出现错误,希望大神们多多指教,不胜感激。