【问题标题】:Java Inheritance: empty method in parent classJava继承:父类中的空方法
【发布时间】:2019-03-08 19:22:40
【问题描述】:

我想知道是否不赞成在父类中有一个空函数供子类在需要时覆盖?我个人认为下面的用例证明了这一点 -

class Foo {

    void performAdditionalChecksIfNeeded(String decrypted) {
    }

    void validate(String encrypted) {
        final String decrypted = decryptIfProperlyEncrypted(encrypted);
        performAdditionalChecksIfNeeded(decrypted);
    }
}

class Bar extends Foo {
    @override
    void performAdditionalChecksIfNeeded(String decrypted) {
        // Additional validation logic
    }
}

我知道 Bar 类可以简单地覆盖 validate() 并调用 super.validate() 以消除对 Foo 中空函数的需要。我以这种方式排列代码的原因是decryptIfProperlyEncrypted 使用了一个我只想保留在Foo 类中的库,原因是关注点分离、性能关注点(解密)和代码重复避免。换句话说,如果performAdditionalChecksIfNeeded 在Foo 中不存在,我将不得不在Bar 中再次执行解密。

【问题讨论】:

  • 我不明白为什么它应该是一个问题。还有更多的功能替代方案,但空的可覆盖方法是解决某些问题的合理方法。

标签: java inheritance polymorphism


【解决方案1】:

在这种情况下,为什么不使用组合而不是继承呢? Foo 类似乎唯一要做的就是解密。我会在 Bar 类中使用它作为依赖项。

【讨论】:

  • 如果加密字符串没有意义,解密方法会抛出异常,在我们的一些用例中,这是唯一需要验证的(查看是否正确加密)
  • 我不认为它是一种验证,它是一种解密操作,如果数据无效,可能会出错。该操作可以封装在一个类中,并在需要的地方使用。
猜你喜欢
  • 2015-03-14
  • 2014-06-21
  • 1970-01-01
  • 2011-06-20
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 2019-02-28
相关资源
最近更新 更多