父类中能否实现一个方法(方法中的参数是子类中定义的成员),使得子类都能继承该方法

能不能在父类中实现一个方法,使得每一个子类都具有该“类型”的方法,只是不同的子类中该方法的参数都是自己定义的成员变量。

代码,如下,创建了一个枚举,枚举对象中的属性是 值-中文描述的对应,希望输入一个值,马上获取到对应的中文描述

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;
    }
    
}

如上,希望自己创建的枚举都具有这样的的功能 getMessageByCode,类似于每一个枚举都具有的vlaues()方法,但是找不到value的实现方式,所以想写一个抽象类来实现该功能,由枚举来继承这个抽象类,不知道是否可行

阅读 4.6k
2 个回答

ioc控制反转,你值得拥有。

enum类是无法被继承的,编译器会自动把枚举用继承enum类来表示,但这一过程是由编译器完成的,枚举也不过是个语法糖。被声明为枚举以后其实跟定义了一个类差不多,比如可以有构造方法什么的。
因为枚举不可能被继承,因此写抽象类的想法不可以实现,但是枚举可以实现接口,所有两种方法如下:

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添加一个方法或者继承一个类,







撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题