Abstraktné OOP triedy v TypeScript

Vyskytujú sa situácie, keď máme nadradenú triedu, ktorá obsahuje všeobecné vlastnosti a metódy, a od nej dedia odvodené triedy.

Zároveň sa môže stať, že budeme vytvárať objekty odvodených tried, ale nie nadradenej triedy. Je pre nás potrebná len na zoskupenie spoločných vlastností a metód.

V tomto prípade, aby sme výslovne zakázali vytváranie objektov nadradenej triedy, môžeme ju deklarovať ako abstraktnú. To sa vykonáva pomocou kľúčového slova abstract.

Pozrime sa na príklad. Vezmime našu triedu User a deklarujme ju ako abstraktnú:

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

Vytvorme triedu Student, ktorá dedí od User:

typescriptclass Student extends User {
  public course: number;

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

Vytvorme triedu Employee, ktorá dedí od User:

typescriptclass Employee extends User {
  public salary: number;

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

Vytvorte abstraktnú triedu Figure, ktorá predstavuje geometrický útvar. Nech má vlastnosti pre obvod a obsah.

Задание 2

Vytvorte triedu Square, ktorá dedí od triedy Figure.

Задание 3

Vytvorte triedu Rectangle, ktorá dedí od triedy Figure.