Abstraktūs OOP klasės TypeScript

Būna situacijų, kai mes turime tėvinę klasę, kurioje yra bendros savybės ir metodai, o iš jos paveldi išvestinės klasės.

Tuo pat metu gali būti taip, kad mes kursime išvestinių klasių objektus, bet ne tėvinės klasės. Ji mums reikalinga tik bendrų savybių ir metodų grupuoti.

Tokiu atveju, kad aiškiai uždraustume kurti tėvinės klasės objektus, galime paskelbti ją abstrakčia. Tai daroma naudojant raktinį žodį abstract.

Pažiūrėkime pavyzdžiu. Paimkime savo klasę User ir paskelbkime ją abstrakčia:

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

Sukurkime klasę Student, kuri paveldi iš User:

typescriptclass Student extends User {
  public course: number;

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

Sukurkime klasę Employee, kuri paveldi iš User:

typescriptclass Employee extends User {
  public salary: number;

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

Sukurkite abstrakčią klasę Figure, kuri reprezentuoja geometrinę figūrą. Tebūnie joje savybės perimetrui ir plotui.

Задание 2

Sukurkite klasę Square, kuri paveldi iš klasės Figure.

Задание 3

Sukurkite klasę Rectangle, kuri paveldi iš klasės Figure.