【发布时间】:2019-12-07 10:57:45
【问题描述】:
我对在运行时如何调用方法和构造函数感到困惑,因为派生的构造函数被打印了 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;
}
我希望输出是
Hello world
Derived : 106
Base : 196
相反,我得到了
Hello World
Inside Base Const
Inside Derived showAll
Derived : 0.0
Inside Derived Const
Inside Derived showAll
Derived : 106.0
【问题讨论】:
-
将高度作为参数添加到方法中,并在调用方法时传递值。就像 showAll(double height){ System.out.println("height: " + height }
-
主函数不应该在类中
-
当你试图打印出
Derived::height的值时,对象还没有完全实例化 -
@TymekWojnarowski 为什么不呢?只是一个设计问题,对给定的问题没有影响
-
实例初始化器将在对象初始化后执行(即在构造函数调用后)希望这会有所帮助:docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.5
标签: java oop inheritance constructor output