说我正在写一个程序,并在父类中有一个方法:
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()方法?
答案 0 :(得分:2)
为什么不使用子类中的getNumber()的覆盖版本而不是父类中的常规getNumber()方法?
您永远不会在您发布的代码中创建子类<li class="product-category product first">
<a href="#">
<img src="http://placehold.it/370x370" alt="Drinks" class="imgbox" width="370" height="370" />
<h2 class="woocommerce-loop-category__title">Drinks</h2>
</a>
</li>
的实例,只有父类的实例(NumbersTestChild
返回父类的实例 - getApplication()
) 。因此执行父方法。
答案 1 :(得分:1)
这一行int print = getApplication().calcNumber()
没有创建子类的实例。这意味着getNumber()
基本上仍属于NumbersTest
。
这样的事情可以起作用:
NumbersTestChild child = new NumbersTestChild();
int print = child.calcNumber();
.....
答案 2 :(得分:0)
如果您想获得所需的输出,请在main()
中更改NumbersTestChild
方法代码,如下所示。
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);
}