Как классы наследуются друг от друга?
Классы
Классы наследуются через `extends` (задаёт родителя) и `super` (вызывает конструктор и методы родителя). Под капотом это прототипное наследование.
Синтаксис
class Animal {
constructor(name) {
this.name = name;
}
eat() {
return `${this.name} ест`;
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // вызвать конструктор родителя
this.breed = breed;
}
eat() {
return `${super.eat()} корм`; // вызвать метод родителя
}
bark() {
return 'Гав';
}
}
const dog = new Dog('Рекс', 'лабрадор');
dog.eat(); // 'Рекс ест корм'
dog.bark(); // 'Гав'Правила
- extends — устанавливает наследование.
- super(...) в конструкторе — обязателен до обращения к
thisв наследнике. - super.method() — вызов метода родителя (для расширения, а не полной замены).
- Переопределение — метод в наследнике заменяет родительский (полиморфизм).
Под капотом
class — сахар над прототипами: Dog.prototype.__proto__ === Animal.prototype. Методы ищутся по цепочке прототипов.
Композиция против наследования
Глубокие иерархии хрупки — часто предпочитают композицию («предпочитай композицию наследованию»).
Коротко для собеседования
Классы наследуются через extends (родитель) и super (конструктор/методы родителя; super() обязателен до this). Методы можно переопределять (полиморфизм). Под капотом — прототипы (Dog.prototype.__proto__ === Animal.prototype). Глубокие иерархии заменяют композицией.