for*_*ert 13
您应该使用"更多个别东西"抽象的方法,而不是方法本身.
// AbstractBase.java
public abstract class AbstractBase {
public final void method() {
everybodyDoesThisStuff();
doIndividualStuff();
}
abstract void doIndividualStuff();
private void everybodyDoesThisStuff() {
// stuff that everybody does
}
}
// ConcreteClass.java
public class ConcreteClass extends AbstractBase {
void doIndividualStuff() {
// do my individual stuff
}
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案是要求所有子类调用super.method().问题是没有办法实际执行.另一种选择是创建一个单独的方法,在内部执行所需的行,然后调用抽象方法:
public final void method() {
callEveryTime();
doMethod();
}
protected abstract void doMethod();
Run Code Online (Sandbox Code Playgroud)
请注意,method()是public final因此它可以被称为地方,但不覆盖,而doMethod()为protected,因此它可以被覆盖,但不是所谓的包(或子类)之外.
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |