zoukankan      html  css  js  c++  java
  • Java枚举抽象方法实战

    需求背景

       需求已经确定了几个固定的常量值,并且每个常量值都有相同的行为,但是具体实现细节不同。建议使用枚举抽象方法,优点:结构清晰,便于扩展。

    枚举类实现抽象方法

       与常规抽象类一样,enum类允许我们为其定义抽象方法,然后使每个枚举实例都实现该方法,以便产生不同的行为方式,注意abstract关键字对于枚举类来说并不是必须的,举个栗子:

    public enum GradeEnum {
        //考试分数划分为A、B、C、D和E 五个等级
        A("90~100") {
            @Override
            public String getGrade(String studentName) {
                return studentName + "优秀";
            }
        }, B("80~89") {
            @Override
            public String getGrade(String studentName) {
                return studentName + "良好";
            }
        }, C("70~79") {
            @Override
            public String getGrade(String studentName) {
                return studentName + "中等" + getScore();
            }
        }, D("60~69") {
            @Override
            public String getGrade(String studentName) {
                return studentName + "及格";
            }
        }, E("0~59") {
            @Override
            public String getGrade(String studentName) {
                return studentName + "成绩很差";
            }
        };
        private String score;
    
        private GradeEnum(String score) {
            this.score = score;
        }
    
        public String getScore() {
            return this.score;
        }
    
        public abstract String getGrade(String studentName);
    }

       定义GradeEnum的时候,并未添加abstract关键字。

       可以把 enum 类看成是一个普通的类,枚举类都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。 

       成员方法可以直接操作成员变量,比如score,并且得到返回结果,静态方法是遍历各个实例使用其成员变量计算得到返回结果,方法过程都是根据成员属性进行计算。

    如果我们想让各个实例拥有完全不一样的方法实现,不依赖于成员变量,那么,需要定义抽象方法,实例使用{...}匿名块,在匿名块中实现抽象。如上述例子中的抽象方法getGrade。也可以通过枚举类实现接口来达到相同的目的。

  • 相关阅读:
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【SPOJ3267】D-query-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【HDU3966】Aragorn's Story-树链剖分或LCT维护路径
    BZOJ 4569 萌萌哒
    BZOJ 2460 元素
    BZOJ 2115 Xor
    BZOJ 2750 Road
  • 原文地址:https://www.cnblogs.com/east7/p/11827810.html
Copyright © 2011-2022 走看看