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