public class Base {
int var =0;
Base(){
System.out.println("Inside Base constructor .....");
setVar();
}
public void setVar(){
System.out.println("Inside base setVar method.....");
var+=10;
}
public int getVar(){
return var;
}
}
派生类:
public class Derived extends Base {
Derived(){
System.out.println("Inside Derived constructor .....");
setVar();
}
public void setVar(){
System.out.println("Inside Derived setVar method.....");
var+=20;
}
public static void main(String[] args){
Base b = new Derived();
System.out.println(b.getVar());
}
}
输出.....
Inside Base constructor .....
Inside Derived setVar method.....
Inside Derived constructor .....
Inside Derived setVar method.....
40
问题---->为什么当控制转到基类构造函数时,调用Derived类的setVar()方法而不是Base类的setVar()方法。 我期望输出为30,但是当在调试模式下运行该程序时发现了流程并且输出为40.有人可以解释这背后的逻辑。 感谢
答案 0 :(得分:0)
Java将根据变量的运行时类型决定运行哪个方法,即使用多态,即使调用的方法来自基类构造函数。
调用基类构造函数时,多态意味着调用派生类的setVar
版本,并添加20。然后调用派生类构造函数,再次调用派生类的setVar
版本,再添加20,产生40。
答案 1 :(得分:0)
工作中的多态性。
当您在派生类中覆盖超类方法时,当有人对派生类的任何对象进行操作时,总是会调用派生类中的重写方法,即使某人是超类。
所以Derived
setVar()
被调用两次,因为它在' Derived
'中被覆盖了并且您尝试创建' Derived
'类。