Java枚舉抽象方法實(shí)例解析
這篇文章主要介紹了Java枚舉抽象方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
需求背景
需求已經(jīng)確定了幾個(gè)固定的常量值,并且每個(gè)常量值都有相同的行為,但是具體實(shí)現(xiàn)細(xì)節(jié)不同。建議使用枚舉抽象方法,優(yōu)點(diǎn):結(jié)構(gòu)清晰,便于擴(kuò)展。
枚舉類(lèi)實(shí)現(xiàn)抽象方法
與常規(guī)抽象類(lèi)一樣,enum類(lèi)允許我們?yōu)槠涠x抽象方法,然后使每個(gè)枚舉實(shí)例都實(shí)現(xiàn)該方法,以便產(chǎn)生不同的行為方式,注意abstract關(guān)鍵字對(duì)于枚舉類(lèi)來(lái)說(shuō)并不是必須的,舉個(gè)栗子:
public enum GradeEnum {
//考試分?jǐn)?shù)劃分為A、B、C、D和E 五個(gè)等級(jí)
A("90~100") {
@Override
public String getGrade(String studentName) {
return studentName + "優(yōu)秀";
}
}, 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 + "成績(jī)很差";
}
};
private String score;
private GradeEnum(String score) {
this.score = score;
}
public String getScore() {
return this.score;
}
public abstract String getGrade(String studentName);
}
定義GradeEnum的時(shí)候,并未添加abstract關(guān)鍵字。
可以把 enum 類(lèi)看成是一個(gè)普通的類(lèi),枚舉類(lèi)都可以定義一些屬性和方法,不同之處是:enum 不能使用 extends 關(guān)鍵字繼承其他類(lèi),因?yàn)?enum 已經(jīng)繼承了 java.lang.Enum(java是單一繼承)。
成員方法可以直接操作成員變量,比如score,并且得到返回結(jié)果,靜態(tài)方法是遍歷各個(gè)實(shí)例使用其成員變量計(jì)算得到返回結(jié)果,方法過(guò)程都是根據(jù)成員屬性進(jìn)行計(jì)算。
如果我們想讓各個(gè)實(shí)例擁有完全不一樣的方法實(shí)現(xiàn),不依賴(lài)于成員變量,那么,需要定義抽象方法,實(shí)例使用{...}匿名塊,在匿名塊中實(shí)現(xiàn)抽象。如上述例子中的抽象方法getGrade。也可以通過(guò)枚舉類(lèi)實(shí)現(xiàn)接口來(lái)達(dá)到相同的目的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于javassist進(jìn)行動(dòng)態(tài)編程過(guò)程解析
這篇文章主要介紹了基于javassist進(jìn)行動(dòng)態(tài)編程過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Java中double和float類(lèi)型的區(qū)別與使用方法
float和double都是用來(lái)表示浮點(diǎn)數(shù)的數(shù)據(jù)類(lèi)型,但是它們之間有一些區(qū)別,這篇文章主要給大家介紹了關(guān)于Java中double和float類(lèi)型的區(qū)別與使用方法的相關(guān)資料,需要的朋友可以參考下2024-07-07
SpringCloud Gateway中斷言路由和過(guò)濾器的使用詳解
這篇文章主要介紹了SpringCloud Gateway中斷言路由和過(guò)濾器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
基于Java 數(shù)組內(nèi)存分配的相關(guān)問(wèn)題
本篇文章是對(duì)Java中數(shù)組內(nèi)存分配進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Spring?Data?Elasticsearch?5.x實(shí)現(xiàn)單詞糾錯(cuò)和自動(dòng)補(bǔ)全
這篇文章主要為大家介紹了Spring?Data?Elasticsearch?5.x實(shí)現(xiàn)單詞糾錯(cuò)和自動(dòng)補(bǔ)全示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
spring boot使用logback日志級(jí)別打印控制操作
這篇文章主要介紹了spring boot使用logback日志級(jí)別打印控制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Java實(shí)現(xiàn)微信公眾號(hào)獲取臨時(shí)二維碼功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)微信公眾號(hào)獲取臨時(shí)二維碼功能,結(jié)合實(shí)例形式分析了java調(diào)用微信公眾號(hào)接口實(shí)現(xiàn)臨時(shí)二維碼生成功能相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
一個(gè)通用的Java分頁(yè)基類(lèi)代碼詳解
這篇文章主要介紹了一個(gè)通用的Java分頁(yè)基類(lèi)代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12

