Уровень доступа при переопределении метода может быть только таким же или более широким.
Можно ли сузить уровень доступа или изменить тип возвращаемого значения при переопределении метода?
Уровень доступа при переопределении метода может быть только таким же или более широким.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Уровень доступа при переопределении метода может быть только таким же или более широким.
Тип возвращаемого значения может быть таким же, как в базовом классе, или ковариантным (подклассом) для ссылочных типов. Примитивные типы требуют точного совпадения.
Пример ковариантного возврата:
class Animal {
// родительский класс
}
class Dog extends Animal {
// подкласс
}
class AnimalFeeder {
// базовый класс с методом feed
public Animal feed() {
return new Animal();
}
}
class DogFeeder extends AnimalFeeder {
// дочерний класс, переопределяющий метод feed
@Override
public Dog feed() { // ковариантный возвращаемый тип (Dog является подклассом Animal)
return new Dog();
}
}