鍍金池/ 問答/Java  C  網(wǎng)絡安全/ 父類中能否實現(xiàn)一個方法(方法中的參數(shù)是子類中定義的成員),使得子類都能繼承該方法

父類中能否實現(xiàn)一個方法(方法中的參數(shù)是子類中定義的成員),使得子類都能繼承該方法

能不能在父類中實現(xiàn)一個方法,使得每一個子類都具有該“類型”的方法,只是不同的子類中該方法的參數(shù)都是自己定義的成員變量。

代碼,如下,創(chuàng)建了一個枚舉,枚舉對象中的屬性是 值-中文描述的對應,希望輸入一個值,馬上獲取到對應的中文描述

package com.manager.enumeration;

public enum Enum2  {

    SMALL(100, "s"),MEDIUM(101, "m"),LARGE(102, "l"),HUGE(103, "h");
    /**
     * code 與 中文描述 進行一一對應
     * 輸入 code 的值獲取到對應的中文
     * @param code
     * @return
     */
    public String getMessageByCode(int code){
        Enum2 [] enmu2s = Enum2.values();
        for(Enum2 enum2 : enmu2s){
            if(enum2.getCode() == code){
                return enum2.getMessage();
            }
        }
        return "";
    }

    Enum2(int code, String message){
        this.code = code;
        this.message = message;
    }

    private int code;
    private String message;


    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
    
}

如上,希望自己創(chuàng)建的枚舉都具有這樣的的功能 getMessageByCode,類似于每一個枚舉都具有的vlaues()方法,但是找不到value的實現(xiàn)方式,所以想寫一個抽象類來實現(xiàn)該功能,由枚舉來繼承這個抽象類,不知道是否可行

回答
編輯回答
絯孑氣

enum類是無法被繼承的,編譯器會自動把枚舉用繼承enum類來表示,但這一過程是由編譯器完成的,枚舉也不過是個語法糖。被聲明為枚舉以后其實跟定義了一個類差不多,比如可以有構(gòu)造方法什么的。
因為枚舉不可能被繼承,因此寫抽象類的想法不可以實現(xiàn),但是枚舉可以實現(xiàn)接口,所有兩種方法如下:

public interface SubEnum   {
    public String getMessageByCode(int code);
}
public enum Enum2 implements SubEnum {
;

@Override
public String getMessageByCode(int code) {
    // TODO Auto-generated method stub
    return null;
}
}

或者

在本方法中添加所需的方法,也就是你上面的方式:

public enum Enum2 {

SMALL(100, "s"),MEDIUM(101, "m"),LARGE(102, "l"),HUGE(103, "h");
/**

code 與 中文描述 進行一一對應
輸入 code 的值獲取到對應的中文
@param code
@return
*/
public String getMessageByCode(int code){

Enum2 [] enmu2s = Enum2.values();
    for(Enum2 enum2 : enmu2s){
    if(enum2.getCode() == code){
        return enum2.getMessage();
    }
}
return "";
}

Enum2(int code, String message){

this.code = code;
this.message = message;
}

private int code;
private String message;

public int getCode() {

return code;
}

public String getMessage() {

    return message;
}

}
方法三:
改寫java.lang.Enum:

給java.lang.Enum添加一個方法或者繼承一個類,







2017年8月2日 03:37
編輯回答
醉淸風

ioc控制反轉(zhuǎn),你值得擁有。

2017年3月2日 02:49