Вопросы по TS

Объясните переопределение методов в TypeScript

Переопределение методов (method overriding) в TypeScript — это механизм, позволяющий подклассу (или дочернему классу) предоставлять конкретную реализацию метода, который уже реализован в его суперклассе (или родительском классе). Это позволяет вам изменять поведение метода в наследуемом классе, не затрагивая реализацию родителя.

Простой пример

Рассмотрим пример, где у нас есть родительский класс Animal и дочерний класс Dog, который переопределяет метод makeSound.

class Animal {
    makeSound(): void {
        console.log("Животное издает звук");
    }
}

class Dog extends Animal {
    makeSound(): void {
        console.log("Гав-гав");
    }
}

const myDog = new Dog();
myDog.makeSound(); // Выведет: Гав-гав

const myAnimal = new Animal();
myAnimal.makeSound(); // Выведет: Животное издает звук

Как это работает?

  1. Родительский класс (Animal): мы определили метод makeSound, который выводит общее сообщение.
  2. Дочерний класс (Dog): мы наследуем класс Animal и переопределяем метод makeSound, чтобы он выводил специфичный звук для собаки.
  3. Создание объектов: при создании экземпляров класса Dog и Animal, мы можем видеть, что каждый класс использует свою версию метода makeSound.

Использование ключевого слова super

Если в дочернем классе нам нужно вызвать метод родительского класса, это можно сделать с помощью ключевого слова super.

class Cat extends Animal {
    makeSound(): void {
        super.makeSound(); // Вызывает метод родительского класса
        console.log("Мяу-мяу");
    }
}

const myCat = new Cat();
myCat.makeSound();
// Выведет:
// Животное издает звук
// Мяу-мяу

В этом примере класс Cat вызывает метод makeSound родительского класса перед выполнением своей собственной логики.

Заключение

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