用普通类模拟枚举:
/**
* 用普通类模拟枚举
* */
abstract class Week{
private Week(){} //不允许外界构造对象
public static Week SUN = new Week(){
//写自己的nextDay方法
@Override
public Week nextDay() {
return null;
}
};
public static Week MON = new Week(){
@Override
public Week nextDay() {
return null;
}
};
public abstract Week nextDay();
@Override
public String toString(){
if(this == SUN){
return "sunday";
}else{
return "monday";
}
}
}
public class Menu {
public static void main(String[] args) {
Week nextday = Week.SUN.nextDay();
System.out.println(nextday);
}
}
定义枚举一句枚举的常用方法:
enum B{
B1,B2,B3
}
public class Menu {
public static void main(String[] args) {
A a = A.valueOf("A2"); //把一个字符串转换成枚举
A[] a1 = A.values(); //获得枚举中的所有对象组成的数组
}
public enum A{
A1,A2,A3,A4
};
}
定义带有构造函数的枚举:
enum B{
B1,B2(5),B3;
private B(){
System.out.println("default constructor");
}
private B(int x){
System.out.println("param constructor " + x);
}
}
定义带有抽象方法的枚举:用这种方法去知道每一个枚举对象的相同行为的不同结果
enum B{
B1{
public void fun(){}
},
B2(5){
public void fun(){
}
},
B3{
public void fun(){}
};
private B(){
System.out.println("default constructor");
}
private B(int x){
System.out.println("param constructor " + x);
this.x = x;
}
public abstract void fun();
private int x;
}
总结:
1.枚举中的构造方法必须是私有的
2.枚举中的所有的方法或成员都必须在元素定义之后
3.用抽象方法+匿名内部类的形式去为每一个枚举对象指定同一个行为的不同方法
4.如果枚举中只有一个元素的话可以把他当成一个单例