Classes, Métodos e Campos Abstratos - TypeScript
Classes Abstratas
Classes abstratas representam classes definidas com a palavra-chave abstract
Em geral, classes abstratas descrevem entidades que na realidade não têm uma implementação concreta. Por exemplo, uma figura geométrica pode ser um círculo, um quadrado ou um triângulo, mas uma figura geométrica por si só não existe. Trabalhamos com figuras concretas. Ao mesmo tempo, todas as figuras podem compartilhar alguma funcionalidade comum. Nesse caso, podemos definir uma classe abstrata Figure
abstract class Figure {
getArea(): void {
console.log("Not Implemented");
}
}
class Rectangle extends Figure {
constructor(public width: number, public height: number) {
super();
}
getArea(): void {
let square = this.width * this.height;
console.log("area =", square);
}
}
let someFigure: Figure = new Rectangle(20, 30);
someFigure.getArea(); // area = 600
Neste exemplo, a classe abstrata define o método getArea()
Rectangle
Métodos Abstratos
No entanto, nesse caso, o método getArea
abstract class Figure {
abstract getArea(): void;
}
class Rectangle extends Figure {
constructor(public width: number, public height: number) {
super();
}
getArea(): void {
let square = this.width * this.height;
console.log("area =", square);
}
}
let someFigure: Figure = new Rectangle(20, 30);
someFigure.getArea();
Um método abstrato não define nenhuma implementação. Se uma classe contém métodos abstratos, ela deve ser abstrata. Além disso, ao herdar, as classes derivadas são obrigadas a implementar todos os métodos abstratos.
Campos Abstratos
Uma classe abstrata também pode ter campos abstratos, ou seja, campos definidos com o modificador abstract
abstract class Figure {
abstract x: number;
abstract y: number;
abstract getArea(): void;
}
class Rectangle extends Figure {
constructor(public x: number, public y: number, public width: number, public height: number) {
super();
}
getArea(): void {
let square = this.width * this.height;
console.log("area =", square);
}
}
let someFigure: Figure = new Rectangle(10, 10, 20, 25);
someFigure.getArea();
Neste caso, a classe Figure
x
y
abstract x: number;
abstract y: number;
A classe Rectangle
constructor(public x: number, public y: number, public width: number, public height: number)
Conclusão
Classes abstratas são úteis quando você deseja criar uma classe base que serve como um modelo ou esqueleto para outras classes. Elas permitem definir métodos e campos abstratos que devem ser implementados por classes derivadas.