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

为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值