Абстрактни ООП класове в TypeScript

Има ситуации, когато имаме родителски клас, съдържащ общи свойства и методи, а от него наследяват дъщерни класове.

В същото време може да се случи, че ще създаваме обекти от дъщерни класове, но не и от родителския клас. Той ни е необходим само за групиране на общи свойства и методи.

В този случай, за да забраним изрично създаването на обекти от родителския клас, можем да го декларираме като абстрактен. Това става с помощта на ключовата дума abstract.

Нека разгледаме пример. Вземете нашия клас User и го декларирайте като абстрактен:

typescriptabstract class User {
  public name: string;
  
  constructor(name: string) {
    this.name = name;
  }
}

Нека направим клас Student, наследяващ от User:

typescriptclass Student extends User {
  public course: number;

  constructor(name: string, course: number) {
    super(name);
    this.course = course;
  }
}

Нека направим клас Employee, наследяващ от User:

typescriptclass Employee extends User {
  public salary: number;

  constructor(name: string, salary: number) {
    super(name);
    this.salary = salary;
  }
}
Задание 1

Създайте абстрактен клас Figure, представляващ геометрична фигура. Нека има свойства за периметър и площ.

Задание 2

Направете клас Square, наследяващ от класа Figure.

Задание 3

Направете клас Rectangle, наследяващ от класа Figure.