是否有可能为子类中的方法定义一些默认行为,而不必调用 super
?
例如:假设我们要设置 boolean
父类(super class)中的值,并且您想对子类隐藏它,有没有办法隐藏 boolean 值的修改?假设我们有以下基类 BaseTest
public class BaseTest {
private boolean mIsInitialized = false;
public BaseTest() {
}
public void initialize() {
mIsInitialized = true;
}
}
及其子类Test
:
public class Test extends BaseTest {
public Test() {
}
public void initialize() {
}
}
我想调用 Test.initialize()
设置mIsInitialized
值为 true
无需调用super.initialize()
。我同样希望避免在父类(super class)中定义抽象函数。
这可能吗?
最佳答案
可以做到这一点,但不能通过重写initialize
。在BaseTest
类中,将initialize
标记为final
,这样它就不能被覆盖。在initialize
中,调用另一个方法来执行任何子类初始化。
public final void initialize() {
mIsInitialized = true;
initializeFurther();
}
你说没有抽象
方法。但是,initializeFurther
可以直接清空。
protected void initializeFurther() {}
然后,子类Test
只需要重写initializeFurther
即可。
public class Test extends BaseTest {
@Override
protected void initializeFurther() {
// Initialize Test here.
}
}
基类的initialize
方法保证将mIsInitialized
设置为true
,并且Test
可以实现initializeFurther
但它想要,而不调用 super.initialize()
。 Test
无法阻止父类(super class) BaseTest
进行初始化。
当在任何 BaseTest
实例上调用 initialize
时,initialize
逻辑将始终运行。
关于java - 不使用 super 的子类方法的默认行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363845/