Проблема с вашим кодом заключается в том, что myString
инициализируется в начале конструктора класса A
, но справа после супер-конструктора (то есть класса B
). Поскольку вы обращаетесь к переменной ранее из конструктора класса B
(косвенно через вызов переопределенного метода c
), вы получаете это поведение.
Как правило: если вы хотите избежать непредвиденного поведения, не вызывайте переопределенные методы до выполнения конструктора.