Приведение к базовому типу; почему я получаю вывод 11 - PullRequest
0 голосов
/ 09 января 2020

Итак, я запустил этот код, и я не понимаю, почему я получил вывод 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 Ответ

2 голосов
/ 09 января 2020
Parent p = new Child();

Это создает экземпляр класса Child. Это должно выполнить конструктор класса Child. Но перед этим он запустит конструктор класса Parent. Это установит значение counter равным 1.

Далее, когда запускается конструктор дочернего класса, он печатает 1.

Последняя часть тривиальна. При вызове System.out.print(p.counter); печатается еще один 1. Таким образом, результат будет 11.

Сводка: Конструктор родительского класса будет выполнен до дочернего.


Кстати, ничего такого нет делать с апкастинг . Это наследство.

...