Apstraktne OOP klase u TypeScript-u

Ponekad postoje situacije gde imamo roditeljsku klasu koja sadrži opšta svojstva i metode, a od nje nasleđuju klase-potomci.

Pritom može biti slučaj da ćemo kreati objekte klasa-potomaka, ali ne i roditeljske klase. Ona nam je potrebna samo za grupisanje zajedničkih svojstava i metoda.

U tom slučaju, da bismo eksplicitno zabranili kreiranje objekata roditeljske klase, možemo deklarisati je apstraktnom. Ovo se radi uz pomoć ključne reči abstract.

Pogledajmo na primeru. Uzmimo našu klasu User i deklarišimo je apstraktnom:

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

Napravimo klasu Student koja nasleđuje od User:

typescriptclass Student extends User {
  public course: number;

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

Napravimo klasu Employee koja nasleđuje od User:

typescriptclass Employee extends User {
  public salary: number;

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

Napravite apstraktnu klasu Figure, koja predstavlja geometrijsku figuru. Neka u njoj budu svojstva za obim i površinu.

Задание 2

Napravite klasu Square koja nasleđuje od klase Figure.

Задание 3

Napravite klasu Rectangle koja nasleđuje od klase Figure.