Clases abstractas de POO en TypeScript

Hay situaciones en las que tenemos una clase padre que contiene propiedades y métodos comunes, y de ella heredan las clases hijas.

En este caso, puede ser que creemos objetos de las clases hijas, pero no de la clase padre. Esta solo nos es necesaria para agrupar propiedades y métodos comunes.

En este caso, para prohibir explícitamente la creación de objetos de la clase padre, podemos declararla abstracta. Esto se hace usando la palabra clave abstract.

Veamos un ejemplo. Tomemos nuestra clase User y declarémosla abstracta:

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

Hagamos la clase Student, que hereda de User:

typescriptclass Student extends User {
  public course: number;

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

Hagamos la clase Employee, que hereda de User:

typescriptclass Employee extends User {
  public salary: number;

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

Crea una clase abstracta Figure, que representa una figura geométrica. Que tenga propiedades para el perímetro y el área.

Задание 2

Haz una clase Square, que herede de la clase Figure.

Задание 3

Haz una clase Rectangle, que herede de la clase Figure.