假如我们需要给学生打成绩而且只能是A,B,C,D四种类型,我们用传统方法和枚举分别实现
class Grade{ private Grade(){ } public static final Grade A = new Grade(); public static final Grade B = new Grade(); public static final Grade C = new Grade(); public static final Grade D = new Grade(); } enum Grade1{ A,B,C,D }
这样我们的Grade就只能取A,B,C,D
下面来说一下自带构造函数的枚举,同样是Grade,如果我们想知道每个成绩所代表的分数该怎么做呢?
1 enum Grade{ 2 3 A("100-90"),B("90-80"),C("80-70"),D("70-60"); 4 5 private String value; 6 7 private Grade(String value){ 8 this.value = value; 9 } 10 11 public String get(){ 12 return this.value; 13 } 14 15 } 16 17 public class Demo2 { 18 19 @Test 20 public void demo(){ 21 Grade g = Grade.A; 22 System.out.println(g.get()); 23 } 24 25 }
枚举类的抽象方法使用
1 enum Grade{ 2 3 A("100-90"){ 4 public String get2(){ 5 return "优"; 6 } 7 }, 8 B("90-80"){ 9 public String get2(){ 10 return "良"; 11 } 12 }, 13 C("80-70"){ 14 public String get2(){ 15 return "一般"; 16 } 17 }, 18 D("70-60"){ 19 public String get2(){ 20 return "差"; 21 } 22 }; 23 24 private String value; 25 26 private Grade(String value){ 27 this.value = value; 28 } 29 30 public String get(){ 31 return this.value; 32 } 33 34 public abstract String get2(); 35 36 }
总结一下枚举类的使用:枚举相当于在限制类对象类型的一种简化,枚举类也是一种特殊形式的Java类,枚举类中声明的每一个枚举值代表枚举类的一个实例对象,与java中的普通类一样,在声明枚举的时候,也可以声明属性,方法和构造方法,当然构造方法必须是private。枚举类也可以实现接口,或者继承抽象类。