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

В JavaScript классы могут наследоваться с помощью ключевого слова extends. Когда мы создаем новый класс на основе существующего класса, мы говорим, что новый класс является потомком (или дочерним классом) родительского класса. Потомок наследует все свойства и методы родительского класса, а также может добавлять свои собственные свойства и методы.

Например, мы можем создать класс Animal, который имеет свойство name и метод speak(), а затем создать класс Dog, который наследует Animal и добавляет свойство breed и метод bark():

class Animal {
  constructor(name) {
    this.name = name
  }
 
  speak() {
    console.log(`${this.name} makes a noise.`)
  }
}
 
class Dog extends Animal {
  constructor(name, breed) {
    super(name)
    this.breed = breed
  }
 
  bark() {
    console.log(`${this.name} barks!`)
  }
}
 
const dog1 = new Dog("Rufus", "Labrador")
dog1.speak() // 'Rufus makes a noise.'
dog1.bark() // 'Rufus barks!'
console.log(dog1.breed) // 'Labrador'

В этом примере мы создаем класс Animal с конструктором, который устанавливает имя животного, и методом speak(), который выводит сообщение о шуме. Затем мы создаем класс Dog, который наследует Animal с помощью ключевого слова extends и добавляет свойство breed и метод bark(). В конструкторе Dog мы вызываем конструктор Animal с помощью super(name), чтобы установить имя животного, а затем устанавливаем свойство breed.

Мы создаем объект dog1, используя конструктор Dog, и вызываем методы speak() и bark(), которые были унаследованы от Animal и добавлены в Dog. Мы также выводим свойство breed, которое мы добавили в Dog.

Ответ на второй вопрос - в JavaScript не поддерживается множественное наследование классов, т. е. класс может наследоваться только от одного родительского класса. Однако, при необходимости можно использовать интерфейсы и миксины для реализации поведения, которое может быть наследовано от нескольких классов.


Назад