Скорее всего, в конструкторе класса-предка dom
также вызывается виртуальный метод getValues
, соответственно, при создании экземпляра потомка bolshoi
, например new bolshoi("белый", 10, 20)
, конструктор базового класса вызывает метод класса-потомка getValues
до того, как полю high
было присвоено значение 20, переданное в конструктор класса-потомка.
И тогда метод класса-потомка использует непроинициализированное значение поля high
по умолчанию: даже если бы в коде это поле было бы проинициализировано ненулевым значением private int high = 300;
, инициализация числом 300 состоялась бы только после выполнения конструктора базового класса.
Ещё одна ошибка в коде метода bolshoi::setValues
-- потеря входного значения high
, которое будет перезатёрто двойкой в строке this.high = high = 2;
: сначала любому входному аргументу присвоится 2, и только потом в поле экземпляра this.high
запишется результат правого присваивания.