Java 向上投射;为什么我会得到输出11

Java 向上投射;为什么我会得到输出11,java,inheritance,polymorphism,upcasting,Java,Inheritance,Polymorphism,Upcasting,所以我运行了这段代码,我不明白为什么我得到了输出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){

所以我运行了这段代码,我不明白为什么我得到了输出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);
   }
}
这将创建
子类的一个实例。这必须执行
子类的构造函数。但在此之前,它将运行父类的构造函数。这将
计数器的值设置为1

接下来,当运行子类构造函数时,它将打印
1

最后一部分是琐碎的。调用
System.out.print(p.counter)打印另一个
1
。因此,结果是
11

摘要:父类的构造函数将在子类的构造函数之前执行


顺便说一句,这与向上投射无关。这是继承

这将创建
子类的一个实例。这必须执行
子类的构造函数。但在此之前,它将运行父类的构造函数。这将
计数器的值设置为1

接下来,当运行子类构造函数时,它将打印
1

最后一部分是琐碎的。调用
System.out.print(p.counter)打印另一个
1
。因此,结果是
11

摘要:父类的构造函数将在子类的构造函数之前执行


顺便说一句,这与向上投射无关。这是继承

Parent p = new Child();