Ste*_*ock 2 java inheritance information-hiding subclass superclass
是否有可能为子类中的方法定义一些默认行为,而不必调用super?
例如:假设我们想boolean在超类中设置一个值并且你想从子类中隐藏它,有没有办法隐藏布尔值的修改?假设我们有以下基类BaseTest
public class BaseTest {
private boolean mIsInitialized = false;
public BaseTest() {
}
public void initialize() {
mIsInitialized = true;
}
}
Run Code Online (Sandbox Code Playgroud)
及其子类Test:
public class Test extends BaseTest {
public Test() {
}
public void initialize() {
}
}
Run Code Online (Sandbox Code Playgroud)
我希望调用Test.initialize()将mIsInitialized值设置为true无需调用super.initialize().我同样希望避免在超类中定义抽象函数.这甚至可能吗?
可以这样做,但不能覆盖initialize.在BaseTest课堂上,标记initialize为final无法覆盖.在initialize,调用另一个方法来进行任何子类初始化.
public final void initialize() {
mIsInitialized = true;
initializeFurther();
}
Run Code Online (Sandbox Code Playgroud)
你说没有abstract方法.但是,initializeFurther可以变得空虚.
protected void initializeFurther() {}
Run Code Online (Sandbox Code Playgroud)
然后,子类Test只需要覆盖initializeFurther.
public class Test extends BaseTest {
@Override
protected void initializeFurther() {
// Initialize Test here.
}
}
Run Code Online (Sandbox Code Playgroud)
基类的initialize方法保证设置mIsInitialized为true,并且Test可以实现initializeFurther它想要的,而无需调用super.initialize(). Test无法阻止超类BaseTest进行初始化.
当initialize调用任何BaseTest情况下,initialize逻辑将始终运行.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |