将子类的实例传递给方法,然后在该方法中使用它

时间:2018-12-18 10:18:52

标签: java inheritance subclass

我有一个方法(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。有任何想法吗?我想在不使用强制转换的情况下解决此问题。谢谢。

1 个答案:

答案 0 :(得分:1)

  

有什么想法吗?我想在不使用强制转换的情况下解决此问题。

您的选择是:

  1. 用必要的方法定义一个接口,让子类实现它,并将该接口用作参数类型而不是超类。
  2. 将参数类型更改为子类,而不是超类。
  3. instanceof和强制转换(通常不是您想要执行的操作)。

1和2基本上只是彼此的变体。

在您的示例代码中,prepareErrorMessage没有理由接受超类而不是子类(或接口),因为只有 可以使用子类(或实现相同接口的东西)。