public class EnumDemo {
/** 枚举 ————1.5新特性(其他还有那些)
* Java 5 新增,是类类型,但不能使用new 不能继承其他类,也不能作为超类,即不能扩展.但隐式继承自java.lang.Enum类,可以实现接口.
不允许继承的原因:枚举有一个特性,就是只允许内部定义枚举常量,用户是不能够实例化新的实例,如果枚举能够继承其他类的话,就可以通过父类的构造方法实例化新的实例,破坏了枚举的特性。
* Java 5 新增,是类类型,但不能使用new 不能继承其他类,也不能作为超类,即不能扩展.但隐式继承自java.lang.Enum类,可以实现接口.
不允许继承的原因:枚举有一个特性,就是只允许内部定义枚举常量,用户是不能够实例化新的实例,如果枚举能够继承其他类的话,就可以通过父类的构造方法实例化新的实例,破坏了枚举的特性。
枚举能够实现接口的原因:因为接口内部是不能偶定义构造方法的,因此不会通过实现接口的方法破坏枚举的特性,
* 1 枚举的作用:限定了某个类对象的个数
* 2 枚举是一个类,而他的元素是对象;
* 3 枚举只有一个成员就是单例。
*/
public static void main(String[] args) {
Week week = Week.SUN;
System.out.println(week.ordinal());//0 该元素所在位置
System.out.println(week.toString());
System.out.println(week.getDeclaringClass());
System.out.println(Week.valueOf("SUN"));//得到该字符串所对应的枚举元素
System.out.println(Week.values());
}
/*--------------创建一个抽象的枚举类------------------*/
public enum TrafficLamp{
RED(20){
@Override
public TrafficLamp nextLamp() {
return Green;
}
},
Green(20){
public TrafficLamp nextLamp() {
return Green;
}
},
Green(20){
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
}, YELLOW(20){
public TrafficLamp nextLamp() {
return YELLOW;
}
}, YELLOW(20){
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
private int time;
private TrafficLamp(int time){this.time = time;}
public abstract TrafficLamp nextLamp();
}
/*--------------创建一个枚举类------------------*/
public enum Week{
SUN, MON(), TUE(1), FRI(new String[]{"abc"});//元素列表必须在类顶部
//枚举的构造方法
private Week(){}
private Week(int in){}
private Week(String[] str){}
}
}
public TrafficLamp nextLamp() {
return RED;
}
};
private int time;
private TrafficLamp(int time){this.time = time;}
public abstract TrafficLamp nextLamp();
}
/*--------------创建一个枚举类------------------*/
public enum Week{
SUN, MON(), TUE(1), FRI(new String[]{"abc"});//元素列表必须在类顶部
//枚举的构造方法
private Week(){}
private Week(int in){}
private Week(String[] str){}
}
}
/*-------------------模拟一个普通枚举类-------------*/
abstract class WeekDay{
private WeekDay(){}
static final WeekDay Sun = new WeekDay(){
abstract class WeekDay{
private WeekDay(){}
static final WeekDay Sun = new WeekDay(){
@Override
public WeekDay nextDay() {
return Mon;
}
};
static final WeekDay Mon = new WeekDay(){
public WeekDay nextDay() {
return Mon;
}
};
static final WeekDay Mon = new WeekDay(){
@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return Sun;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this == Mon ? "Sun":"Mon";
}
}
public WeekDay nextDay() {
// TODO Auto-generated method stub
return Sun;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this == Mon ? "Sun":"Mon";
}
}
---------------------- ASP.Net+Android+IO开发S、 .Net培训、期待与您交流! ----------------------