Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中重写接口而不是父类_Java_Inheritance_Overriding - Fatal编程技术网

在Java中重写接口而不是父类

在Java中重写接口而不是父类,java,inheritance,overriding,Java,Inheritance,Overriding,我有一个类扩展了另一个类(ReloadableResourceBundleMessageSource),还实现了一个接口(myMessageProvider),如下所示: public class CustomMessageSource extends ReloadableResourceBundleMessageSource implements myMessageProvider{ @Override public String getMessage(String code

我有一个类扩展了另一个类(
ReloadableResourceBundleMessageSource
),还实现了一个接口(
myMessageProvider
),如下所示:

public class CustomMessageSource extends ReloadableResourceBundleMessageSource implements myMessageProvider{

    @Override
    public String getMessage(String code, Object[] objects, final Locale locale{
        try {
            return getMessage(code, objects, locale);
        } catch (NoSuchMessageException e) {
            return code;
        }
    }
}

接口和父类都有
getMessage
函数,但我只想重写接口。当前,此代码给出编译错误,因为父类(
ReloadableResourceBundleMessageSource
)中的getMessage是
final
,,如果您重写
getMessageInternal()
方法,该方法不是
final
,由
getMessage()
方法调用,您可以通过不返回null来影响结果。您不需要在代码中更改对
getMessage()
方法的任何调用,因为它们将自己调用内部方法

@Override
public String getMessageInternal(String code, Object[] objects, final Locale locale) {
        String foo = super.getMessageInternal(code, objects, locale);

        return foo == null ? code : foo;
    }
}

它们采用相同的参数吗?顺便说一句,这里缺少一个“)”
publicstringgetmessage(stringcode,Object[]objects,finallocale){
@XtremeBaumer,是的,是相同的参数。它们应该做相同的事情吗?不,我必须重写它,这样它就不会抛出
NoSuchMessageException
异常。创建一个只实现
myMessageProvider
的不同类,然后使用它并扩展
可重新加载的ResourceBundleMessageSource
。现在我有了你的想法这很好!唯一的问题是getMessage在父类中被调用,子类重写不会影响父类调用。@Arashsoft你到底在说什么。如果你有一个
CustomMessageSource
的实例,你调用
getMessage()
在其上,将调用该方法。如果我对
customeMessageSource
的实例调用
getMessage
,请纠正我的错误。parrent类
ReloadableSourceBundleMessageSource
getMessageInternal
getMessage>处理请求。在该函数内,它尝试调用
getMessageInternal
。它是
reloadableSourceBundleMessageSource
中的内部调用。它不会调用它的子重写。(可能我错了?)你错了。由于
getMessageInternal
方法是一个
受保护的
方法,在实现中被重写,因此实例的方法(CustomMessageSource)您可以通过创建一个类来测试它,该类有一个调用
toString()
的方法,扩展它,提供不同的
toString()
实现并调用原始方法。您会注意到重写实现被调用。它工作了,解决方案非常有创意!:)非常感谢。