str*_*cha 6 java oop inheritance constructor output
我对在运行时如何调用方法和构造函数感到困惑,因为派生的构造函数被打印3次,高度被打印0
我试过在方法和构造函数中打印一些消息,以了解到底发生了什么
public class Derived extends Base{
public static void main(String args[]){
System.out.println("Hello World");
Derived d = new Derived();
}
protected Derived(){
System.out.println("Inside Derived Const");
showAll();
}
protected void showAll(){
System.out.println("Inside Derived showAll");
System.out.println(getClass().getName()+" : "+height);
}
double height = 106.0;
}
class Base{
protected Base(){
System.out.println("Inside Base Const");
showAll();
}
protected void showAll(){
System.out.println("Inside Base showAll");
System.out.println(getClass().getName()+" : "+height);
}
double height = 196.0;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出是
Hello world
Derived : 106
Base : 196
Run Code Online (Sandbox Code Playgroud)
相反,我越来越
Hello World
Inside Base Const
Inside Derived showAll
Derived : 0.0
Inside Derived Const
Inside Derived showAll
Derived : 106.0
Run Code Online (Sandbox Code Playgroud)
这是因为您Derived从Base类派生了该类,并隐藏了变量并覆盖了方法。
每当使用以下方法实例化Derived类时,就在调用Base类的构造函数:
Derived d = new Derived();
Run Code Online (Sandbox Code Playgroud)
在调用上面的代码时,会发生以下情况:
Base()称为"Inside Base Const"被打印showAll()未调用方法,因为它已被覆盖。方法showAll()内部Derived类被称为相反,"Inside Base showAll" 打印"Derived : 106.0"之所以被打印,是因为double height = 196.0;基类double height = 106.0;内部被Derived该类内部遮蔽了。| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |