Наследование классов - это механизм объектно-ориентированного программирования в 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 не поддерживается множественное наследование классов, т. е. класс может наследоваться только от одного родительского класса. Однако, при необходимости можно использовать интерфейсы и миксины для реализации поведения, которое может быть наследовано от нескольких классов.