gpt4 book ai didi

java - 如何从 Java 父类(super class)内部调用重写方法的父类(super class)实现?

转载 作者:行者123 更新时间:2023-11-30 02:05:11 26 4
gpt4 key购买 nike

假设我有两个类SuperClassSubClass,它们扩展了SuperClass,如下所示:

public abstract class SuperClass {
private Object field1;

protected SuperClass(Object obj) {
setField1(obj);
}

public void setField1(Object obj) {
// perform some check on obj and
// then set field1 such that field1==obj
}
}


public class SubClass extends SuperClass {
public SubClass(Object obj) {
super(obj);
}

@Override
public void setField1(Object obj) {
super.setField1(obj);
// do some work that is necessary only when
// field1 is set through SubClass.setField1()
}
}

我需要的是,当我创建 SubClass 的对象时,我需要从 SuperClass 内部调用方法 SuperClass.setField1() > 构造函数,而不是 SubClass.setField1()。但对于上面的代码,调用方法 SubClass.setField1() 会导致抛出 NullPointerException ,因为在 SubClass.setField1()< 中完成的工作 在尚为空的字段上执行。

有什么方法可以从 SuperClass 构造函数内部显式调用 SuperClass.setField1()‍‍‍ 吗?

最佳答案

您可以将所述方法体移至私有(private)方法,并让默认方法(可能被子类覆盖的方法)委托(delegate)给前者。请参阅此示例

public abstract class SuperClass {

private Object field1;

protected SuperClass(Object obj){
// call the safe implementation
setField1Safe(obj);
}


public void setField1(Object obj){
// just delegates
setField1Safe(obj);
}

private void setField1Safe(Object obj){
// perform some check on obj and
// then set field1 such that field1==obj
}
}

public class SubClass extends SuperClass{
public SubClass(Object obj){
super(obj);
}

@Override
public void setField1(Object obj){
super.setField1(obj);
// do some work that is necessary only when
// field1 is set through SubClass.setField1()
}
}

这样子类仍然可以重写 setField1 但如果您确实依赖于实现,那么您可以调用私有(private) setField1Safe 方法。

关于java - 如何从 Java 父类(super class)内部调用重写方法的父类(super class)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580001/

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