Abstraktní OOP třídy v TypeScriptu

Existují situace, kdy máme rodičovskou třídu, která obsahuje obecné vlastnosti a metody, a od ní dědí potomkové třídy.

Zároveň může být tak, že budeme vytvářet objekty potomkových tříd, ale ne rodičovské třídy. Ta je nám potřebná pouze pro skupinování obecných vlastností a metod.

V tomto případě, abychom explicitně zakázali vytváření objektů rodičovské třídy, lze ji deklarovat jako abstraktní. To se provádí pomocí klíčového slova abstract.

Podívejme se na příklad. Vezměme naši třídu User a deklarujme ji jako abstraktní:

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

Vytvořme třídu Student, která dědí od User:

typescriptclass Student extends User {
  public course: number;

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

Vytvořme třídu Employee, která dědí od User:

typescriptclass Employee extends User {
  public salary: number;

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

Vytvořte abstraktní třídu Figure, která představuje geometrický útvar. Nechť v ní jsou vlastnosti pro obvod a obsah.

Задание 2

Vytvořte třídu Square, která dědí od třídy Figure.

Задание 3

Vytvořte třídu Rectangle, která dědí od třídy Figure.