Да, в Java можно сузить уровень доступа и тип возвращаемого значения при переопределении метода. Любой метод может быть сужен до уровня доступа, ниже чем у его базового метода. Кроме того, тип возвращаемого значения может быть сужен до любого подтипа типа возвращаемого значения базового метода. Например, если есть класс Animal с методом makeSound возвращающим тип Object, и подкласс Cat переопределяет метод makeSound, то можно сузить тип возвращаемого значения до String, как показано в примере ниже: class Animal {
public Object makeSound() {
return "Some sound";
}
}
class Cat extends Animal {
@Override public String makeSound() {
return "Meow";
}
} В этом примере переопределенный метод makeSound унаследован от Animal, но тип возвращаемого значения был изменен с Object до String. Теперь для объектов типа Cat метод makeSound возвращает строку "Meow", в то время как для объектов типа Animal, makeSound возвращает объект типа Object. 1606 вопрос-ответ