Metode abstracte în OOP în TypeScript

Se întâmplă ca clasele-derivate să trebuiască să aibă o metodă comună, însă, implementarea acestei metode depinde de derivatul concret. În acest caz, această metodă poate fi declarată în clasa abstractă părinte, fără a scrie implementarea ei. Și atunci derivații vor fi obligați să implementeze aceste metode. Astfel de metode se numesc abstracte și de asemenea se declară folosind cuvântul cheie abstract.

Să luăm ca exemplu clasa noastră abstractă User. Fie ca moștenitorii acestei clase să trebuiască obligatoriu să aibă o metodă show, care afișează datele obiectului.

Implementarea acestei metode, însă, va depinde de derivat. Să declarăm în clasa User această metodă ca abstractă:

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

Să implementăm această metodă în clasa-derivată Student:

typescriptclass Student extends User {
  public course: number;

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

Să implementăm această metodă în clasa-derivată Employee:

typescriptclass Employee extends User {
  public salary: number;

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

În clasa abstractă Figure faceți metode abstracte pentru obținerea ariei și perimetrului.

Задание 2

În clasele-derivate Square și Rectangle scrieți implementarea acestor metode.