Зачем нужно наследование?
Объекты и прототипы
Наследование нужно для переиспользования кода и построения иерархий: класс-потомок получает свойства и методы родителя, расширяя или переопределяя их, без дублирования.
Зачем нужно
Переиспользование кода
Общая логика — в родителе, потомки её наследуют без копирования:
class Animal {
constructor(name) { this.name = name; }
eat() { return `${this.name} ест`; }
}
class Dog extends Animal {
bark() { return 'Гав'; } // + своё, eat() унаследован
}Иерархия и моделирование
Естественно моделировать «is-a» отношения (собака — это животное).
Полиморфизм
Потомки переопределяют методы, работая через общий интерфейс:
class Cat extends Animal {
eat() { return `${super.eat()} рыбу`; } // переопределение
}Расширяемость
Добавить новый тип — создать потомка, не меняя родителя (Open-Closed).
Механизм в JS
extends + super; под капотом — прототипное наследование (class — сахар).
Осторожно — композиция часто лучше
Глубокие иерархии хрупки (изменение родителя ломает потомков, жёсткая связанность). Часто предпочитают композицию — собирать объект из независимых частей:
> «Предпочитай композицию наследованию»
Коротко для собеседования
Наследование нужно для переиспользования кода (общая логика в родителе), моделирования иерархий («is-a»), полиморфизма (переопределение методов) и расширяемости (новый потомок без изменения родителя). В JS — extends/super над прототипами. Но глубокие иерархии хрупки — часто предпочитают композицию.