Поиск по сайту
Ctrl + K
Вопросы по TS

Можно ли вызывать конструктор базового класса из дочернего класса в TypeScript?

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

Пример

Рассмотрим простой пример. У нас есть базовый класс Animal и дочерний класс Dog, который наследует от класса Animal.

class Animal {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

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

class Dog extends Animal {
    breed: string;

    constructor(name: string, breed: string) {
        // Вызов конструктора родительского класса
        super(name);

        this.breed = breed;
    }

    makeSound(): void {
        console.log(`${this.name} говорит: Гав!`);
    }
}

// Создаем экземпляр класса Dog
const myDog = new Dog('Buddy', 'Golden Retriever');
myDog.makeSound(); // Вывод: Buddy говорит: Гав!

Объяснение кода

  • Базовый класс Animal:
    • У этого класса есть свойство name, которое инициализируется через конструктор.
    • Метод makeSound выводит в консоль звук, который издает животное.
  • Дочерний класс Dog:
    • Класс Dog наследует от Animal и имеет дополнительное свойство breed.
    • В конструкторе дочернего класса мы сначала вызываем конструктор родительского класса с помощью super(name), передавая аргумент name, который соответствует имени животного.
    • Затем мы инициализируем собственное свойство breed.
    • Метод makeSound переопределяет метод родительского класса, чтобы выводить специфический звук для собаки.
  • Заключение

    Использование super() для вызова конструктора базового класса является важной частью наследования в TypeScript. Это позволяет вам инициализировать свойства, определенные в родительском классе, и гарантирует, что базовый класс правильно настроен перед использованием его методов и свойств в дочернем классе.

    Содержание:
    Редактировать