← Назад к вопросам

Что такое наследование?

1.0 Junior🔥 221 комментариев
#ООП

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Наследование — это один из фундаментальных принципов объектно-ориентированного программирования (ООП), который позволяет создавать новые классы на основе существующих. Наследующий класс (потомок) получает методы и свойства родительского класса (предка), избегая дублирования кода и создавая иерархию типов.

Наследование в JavaScript

Прототипное наследование (Prototypal Inheritance)

JavaScript использует прототипное наследование, где объекты наследуют свойства через прототипную цепочку.

const Animal = {
  speak() {
    console.log(`${this.name} издает звук`);
  }
};

const dog = Object.create(Animal);
dog.name = 'Шарик';
dog.speak();

ES6 классы

Современный синтаксис для наследования использует ключевое слово class и extends.

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} издает звук`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  speak() {
    console.log(`${this.name} лает!`);
  }

  getInfo() {
    return `${this.name} - ${this.breed}`;
  }
}

const myDog = new Dog('Дружок', 'Лабрадор');
myDog.speak();

Переопределение методов (Override)

Дочерний класс может переопределять методы родителя, адаптируя их для своих нужд. Это называется полиморфизм.

class Vehicle {
  start() {
    console.log('Транспорт начинает движение');
  }
}

class Car extends Vehicle {
  start() {
    console.log('Машина запускает двигатель');
  }
}

class Bike extends Vehicle {
  start() {
    console.log('Мотоцикл стартует');
  }
}

const car = new Car();
const bike = new Bike();

car.start();
bike.start();

Множественное наследование и Миксины

JavaScript не поддерживает прямое множественное наследование, но можно использовать миксины (смешивание поведения).

const canEat = {
  eat() {
    console.log(`${this.name} ест`);
  }
};

const canWalk = {
  walk() {
    console.log(`${this.name} идет`);
  }
};

class Person {
  constructor(name) {
    this.name = name;
  }
}

Object.assign(Person.prototype, canEat, canWalk);

const person = new Person('Иван');
person.eat();
person.walk();

Super для работы с родителем

Super используется для обращения к методам и конструктору родительского класса.

class Parent {
  constructor(name) {
    this.name = name;
  }

  greet() {
    return `Привет, я ${this.name}`;
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  greet() {
    const parentGreet = super.greet();
    return `${parentGreet} и мне ${this.age} лет`;
  }
}

const child = new Child('Маша', 10);
console.log(child.greet());

Когда использовать наследование

  • Иерархия типов: когда объекты образуют логическую иерархию
  • Переиспользование кода: при наличии общего поведения в нескольких классах
  • Полиморфизм: когда разные классы реализуют общий интерфейс

Альтернативы наследованию

В некоторых случаях композиция (комбинирование объектов) предпочтительнее наследования.

class Dog extends Animal { }

class Dog {
  constructor(name) {
    this.name = name;
    this.behavior = new AnimalBehavior();
  }
}

Наследование — мощный инструмент для структурирования кода и создания переиспользуемых компонентов. Однако нужно использовать его разумно, избегая чрезмерной сложности и предпочитая композицию в критичных случаях.

Что такое наследование? | PrepBro