gpt4 book ai didi

java - 不使用 super 的子类方法的默认行为是什么?

转载 作者:行者123 更新时间:2023-12-02 12:57:15 25 4
gpt4 key购买 nike

是否有可能为子类中的方法定义一些默认行为,而不必调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com