【发布时间】:2018-12-18 10:18:51
【问题描述】:
我有一个方法 (prepareErrorMessage),它接受 ErrorMessagePojoSuperclass 类型的对象。但是,我只将 ErrorMessagePojoSuperclass 的子类作为参数传递:
public class ErrorMessagePojoBundle extends ErrorMessagePojoSuperclass {}
public class Tester {
ErrorMessagePojoBundle empb = new ErrorMessagePojoBundle();
prepareErrorMessage(empb);
public void prepareErrorMessage(ErrorMessagePojoSuperclass errorMessagePojo) {
String errorStatusMsg = messageConverter.convertXMLToString(errorMessagePojo);
}
}
ErrorMessagePojoBundle 类比它的超类有更多的方法。
我需要确保当代码行运行messageConverter.convertXMLToString(errorMessagePojo) 时,messageConverter 处理子类的一个实例——在本例中为对象 empb。有任何想法吗?我想在不使用强制转换的情况下解决这个问题。谢谢。
【问题讨论】:
-
欢迎来到 Stack Overflow。方法将处理子类的一个实例,但它不能在没有强制转换的情况下调用任何新方法,因为编译器不知道这些方法存在。如果您可以提供minimal reproducible example,那么提供帮助会更容易 - 目前代码不完整,也无法编译。 (您有一个不在方法/构造函数中的非声明语句。)
-
^^ 单独进行 MCVE 时,选择简单、易于区分的名称很有用,例如
SuperClass和SubClass。长名称只是在最后有所区别。 -
你好@Duke,Make
static ErrorMessagePojoBundle empb = new ErrorMessagePojoBundle();否则编译器会抱怨。在此之后,调用的方法将属于ErrorMessagePojoBundle empb,而不是其超类。
标签: java inheritance subclass