суперкласс инициализируется перед подклассом.
Вызов конструктора B вызывает конструктор A, который вызывает функцию f, печатающую "x in f: 1", после инициализации A остальные Инициализирован B.
Таким образом, по существу, настройка значения перезаписывается.
(Когда вы инициализируете примитивы с их нулевым значением в Kotlin, они технически просто не инициализируются вообще)
Вы можете наблюдать это поведение "перезаписи", изменив сигнатуру с
var x: Int = 0
на var x: Int? = 0
Поскольку x
больше не является примитивом int
поле фактически инициализируется значением, что приводит к выводу:
Hello World!!
x in f: 1
x: 0
x2: 0
in main x : 0