作为一个(学究的)初学者Java程序员,我想知道吗,将所有子类都使用的通用代码块移到父类中单独的受保护的( final )方法中是一种好习惯吗?诸如使用通用值填充列表或通用过滤算法等任务...
也可以使用受保护的静态方法好吗?
class A {
protected final List<String> getVariants() {...}
protected final List<String> filterResults(List<String> variants) {...}
}
class B extends A {
public List<String> doSomethingUsefull() {
List<String> commonVariants = getVariants();
...
return filterResults(commonVariants);
}
}
class C extends A {
public void doSomethingUsefull() {
List<String> commonVariants = getVariants();
...
return filterResults(commonVariants);
}
public void doMoreUsefullThings() {
List<String> commonVariants = getVariants();
...
return filterResults(commonVariants);
}
}
最佳答案
如果您是Java的初学者,并且正在考虑这些事情,那么现在正是阅读《有效Java》一书中第4章“类和接口”的好时机。与您在此处获得的答案相比,这里的信息将更加详尽和细致。
这是考虑混合final
,protected
和static
关键字的一种方法:
static
,因为它破坏了OO范式。 final
关键字也可以防止子类覆盖方法。在这方面,结果与static
相同。 final
应该更经常使用,并且与protected
一起使用是一个好主意。请参阅“有效Java”中的第17项。 protected
和static
很少一起使用。您可能将OO构造与破坏正常OO行为的构造混合在一起,因此这种组合很奇怪。