您的位置:首页 > 其它

枚举用法--带抽象方法的更牛

2017-05-12 15:35 113 查看
为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。 JDK 5新增的 enum 关键字用于定义一个枚举类。

枚举类具有如下特性:
  枚举类也是一种特殊形式的Java类。
  枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
  与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
  枚举类也可以实现接口、或继承抽象类。
  JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
  若枚举类只有一个枚举值,则可以当作单态设计模式使用。

package cn.itcast.enumeration;
import org.junit.Test;
public class Demo1 {
enum Grade{
A("100-90"),B("89-80"),c("79-70"),D("69-60"),E("59-0");//相当于Object
private String value;
private Grade(String value){
this.value =value;
}
public String GetValue(){
return this.value +"  "+ this.name();
}
}
@Test
public void test1() {
Print(Grade.A);  //会输出 100-90  A
}
private void Print(Grade g){
String value= g.GetValue();
System.out.println(value);
}
}


=============

带抽象方法的枚举:

可以在里面定义抽象方法

不过写的方法看起来有点傻,暂时看不出优点,也不是类似继承的增强,

enum 是public static final的 enum又是可以定义抽象方法 感觉有矛盾

package cn.itcast.enumeration;

import org.junit.Test;

public class Demo1 {
enum Grade {
A("100-90") {
public String GetLocaleValue() {
return "成绩优秀";
}
},
B("89-80") {
public String GetLocaleValue() {
return "成绩良";
}
},
c("79-70") {
public String GetLocaleValue() {
return "成绩一般";
}
},
D("69-60") {
public String GetLocaleValue() {
return "成绩及格";
}
},
E("59-0") {
public String GetLocaleValue() {
return "成绩差";
}
};// 相当于Object
private String value;

private Grade(String value) {
this.value = value;
}

public String GetValue() {
return this.value + "  " + this.name();
}

public abstract  String GetLocaleValue();//不可以带body部分的{}
}

@Test
public void test1() {
Print(Grade.A); // 会输出 100-90 A
}

private void Print(Grade g) {
String value = g.GetValue();
System.out.println(value);
System.out.println(g.GetLocaleValue());
}

}


带抽象方法的枚举
------------推荐两篇不错博客

java基础加强--实现带有抽象方法的枚举 - 时间挤挤 - 博客频道 - CSDN.NET http://blog.csdn.net/congwiny/article/details/18894641
Java 枚举用法详解 - 静默虚空 - 博客园 http://www.cnblogs.com/jingmoxukong/p/6098351.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: