Найти в Дзене
DEBAGanov

Java 718. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?

Да, в 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 вопрос-ответ

Да, в 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 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov