所以我运行了这段代码,但我不明白为什么我得到输出 11:
class Parent{
protected int counter;
public Parent(){counter++;}
}
class Child extends Parent{
public Child(){
System.out.print(counter);}
}
}
public class Test{
public static void main(String [] args){
Parent p = new Child();
System.out.print(p.counter);
}
}
最佳答案
Parent p = new Child();
这将创建 Child
类的实例。这必须执行 Child
类的构造函数。但在此之前它将运行父类的构造函数。这会将 counter
的值设置为 1。
接下来,当子类构造函数运行时,它会打印 1
。
最后一部分是微不足道的。调用 System.out.print(p.counter);
打印另一个 1
。因此,结果是11
。
总结:父类的构造函数将在子类的构造函数之前执行。
<小时/>顺便说一句,这与向上转换没有任何关系。这是继承。
关于java - 向上转型;为什么我得到输出 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59656901/