PassFront
  1. PassFront
  2. База знаний
  3. Классы

Как классы наследуются друг от друга?

Классы

Классы наследуются через `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). Глубокие иерархии заменяют композицией.

Другие вопросы раздела