java - 向上转型;为什么我得到输出 11

标签 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){
      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/

相关文章:

c++ - 我应该使用函数指针还是多态?

java - 父类(super class)子类实例化

java - 如何使用 cURL 登录到 Spring Security 登录表单?

java - 我应该仅仅因为添加了一个变量就扩展一个类吗?

inheritance - F#:将接口(interface)(如 IComparable)添加到现有类型(例如,来自 Fare 等库)

c# - 通用类多态性

java - @OneToMany 映射的 Hibernate 用户字符串字段

java - 如何使用运行时/进程类从java备份mysql数据库?

java - 嵌套 for 循环给出意想不到的结果

kotlin - kotlin 中的数据类继承?