[英]can subclass constructor method override superclass constructor? “java”
[英]java method override in subclass applied to superclass
说我正在写一个程序,并在父类中有一个方法:
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()方法?
为什么不使用子类中的getNumber()的重载版本而不是父类中的常规getNumber()方法?
您永远不会在您发布的代码中创建子类NumbersTestChild
的实例,只有父类的实例( getApplication()
返回父类的实例 - NumbersTest
)。 因此执行父方法。
这行int print = getApplication().calcNumber()
没有创建子类的实例。 这意味着getNumber()
基本上仍然属于NumbersTest
。
这样的东西可以工作:
NumbersTestChild child = new NumbersTestChild();
int print = child.calcNumber();
.....
如果要获得所需的输出,请在NumbersTestChild
更改main()
方法代码,如下所示。
public static void main(String[] args) {
NumbersTest ns = new NumbersTestChild(); // Child has been created
/* calcNumber returns 4 ( 2+2) since getNumber() returns 2 from child class */
int print = ns.calcNumber();
System.out.println(print);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.