【发布时间】: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