Подтвердить что ты не робот

Почему вы не можете уменьшить видимость метода в подклассе Java?

Почему компилятор дает сообщение об ошибке при уменьшении видимости метода при его переопределении в подклассе?

4b9b3361

Ответ 1

Поскольку каждый экземпляр подкласса по-прежнему должен быть допустимым экземпляром базового класса (см. принцип подстановки Лискова).

Если подкласс внезапно потерял одно свойство базового класса (например, публичный метод, например), то он больше не будет допустимым заменой базового класса.

Ответ 2

Потому что, если это разрешено, возможна следующая ситуация:

Класс Sub наследует от класса Parent. Родитель имеет открытый метод foo, Sub делает этот метод закрытым. Теперь следующий код будет компилироваться отлично, потому что объявленный тип bar имеет значение Parent:

Parent bar = new Sub();
bar.foo();

Однако неясно, как это должно вести себя. Одна из возможностей - позволить ему вызвать ошибку времени выполнения. Другим было бы просто разрешить его, что позволило бы вызвать частный метод извне, просто нажав на родительский класс. Ни одна из этих альтернатив не является приемлемой, поэтому она не допускается.

Ответ 3

Поскольку подтипы должны использоваться в качестве экземпляров их супертипа.