gpt4 book ai didi

应用于父类(super class)的子类中的java方法重写

转载 作者:行者123 更新时间:2023-11-29 04:26:06 24 4
gpt4 key购买 nike

假设我正在编写一个程序,并且在父类中有一个方法:

    public class NumbersTest {

/**
* @param args the command line arguments
*/

private int number = 1;

private static NumbersTest mNumbersTest = null;

public NumbersTest() {
}



public static NumbersTest getApplication(){
if(mNumbersTest == null)
return new NumbersTest();
return mNumbersTest;
}

public int getNumber(){
return number;
}

public static void main(String[] args) {
int print = getApplication().calcNumber();
System.out.println(print);
}

public int calcNumber(){
int num = getNumber();

return num + num;
}

}

和一个子类:

public class NumbersTestChild extends NumbersTest{

@Override
public int getNumber(){
return 2;
}

public static void main(String[] args) {
int print = getApplication().calcNumber();
System.out.println(print);
}

}

当我运行父类时,我希望 main() 函数打印 2。但是当我运行子类时,我希望 main() 函数打印 4,因为我已经覆盖了 getNumber() 方法以返回值为 2。但是,结果与父类的 main() 相同:2。

为什么不使用子类中 getNumber() 的重写版本来代替父类中的常规 getNumber() 方法?

最佳答案

why doesn't the overidden version of getNumber() from the child class get used instead of the regular getNumber() method in the parent class?

您永远不会在发布的代码中创建子类 NumbersTestChild 的实例,只有父类的实例(getApplication() 返回父类的实例类 - NumbersTest)。因此执行父方法。

关于应用于父类(super class)的子类中的java方法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46172310/

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