Встречается на собеседованиях • сегодня

Может ли наследник служить заменой своему классу-родителю

Да, если соблюдается принцип подстановки Барбары Лисков (LSP). Наследник должен корректно работать в любом контексте, где используется родительский класс, не нарушая его контракта.

Пример:

java
class Bird {
    void fly() {
        System.out.println("Flying");
    }
}

class Penguin extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Penguins can't fly");
}
}

text
Здесь Penguin нарушает LSP, так как клиентский код, ожидающий летающую птицу, сломается. Правильная реализация - не наследовать Penguin от Bird, если летание критично. 

Наследование стоит использовать только при истинном отношении "is-a", когда подкласс действительно является специализацией родителя.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы