Концепция переопределения не применима к переменным (следовательно, правила переопределения). Значение всегда основывается на ссылочном типе, но не на объекте времени выполнения.
Вот почему ваша программа печатает 9, потому что ссылочный тип объекта - MyClass
, а MyClass
наследуется k, значение которого равно 9. Поведение одинаково независимо от модификатора static (k) . Если вы раскомментируете строку в MyClass
, то выход всегда будет 89.