Конструктор суперкласса вызывается первым.Он вызывает count()
дважды.При полиморфизме вызывается count()
в derive
, увеличивая count
до 2
.Приращивается переменная count
в derive
, потому что это означает, что простое имя count
означает в подклассе.Переменная count
в test
является скрытой count
в derive
.
Однако оператор print ссылается на область действия count
в суперклассе,который по-прежнему 0
.
Обратите внимание, что, когда конструктор суперкласса завершается, тело конструктора подкласса может, наконец, выполняться.Это включает в себя предоставление всем переменным экземпляра начальных значений.Здесь, даже если count
уже 2
, оно все равно «инициализируется» на 0
.Поэтому, даже если вы добавите оператор печати в конструктор подкласса, вы все равно получите там 0
для count
.
Чтобы получить count
из 2
, удалите count
в derive
и замените count
в test
на protected
или на частный пакет (без модификатора доступа).Это заставит count()
увеличить значение переменной count
на test
.