Classes Abstratas de OOP em TypeScript

Há situações em que temos uma classe pai contendo propriedades e métodos comuns, e classes filhas que herdam dela.

Além disso, pode acontecer de criarmos objetos das classes filhas, mas não da classe pai. Ela é necessária apenas para agrupar propriedades e métodos comuns.

Nesse caso, para proibir explicitamente a criação de objetos da classe pai, podemos declará-la como abstrata. Isso é feito usando a palavra-chave abstract.

Vamos ver um exemplo. Vamos pegar nossa classe User e declará-la como abstrata:

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

Vamos criar a classe Student, herdando de User:

typescriptclass Student extends User {
  public course: number;

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

Vamos criar a classe Employee, herdando de User:

typescriptclass Employee extends User {
  public salary: number;

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

Crie uma classe abstrata Figure, que representa uma figura geométrica. Que ela tenha propriedades para o perímetro e a área.

Задание 2

Faça a classe Square, herdando da classe Figure.

Задание 3

Faça a classe Rectangle, herdando da classe Figure.