4.6 Classe Abstrata
Classe abstrata é uma classe que não pode ser instanciada diretamente, mas que pode ser herdada por outras classes. Nela, definimos atributos, métodos e métodos abstratos, que são métodos com apenas a assinatura definida, sem implementação.
As classes derivadas (através de override) é que definirão a funcionalidade de cada atributo ou método abstrato. A ideia de uma classe abstrata é forçar que todas as suas classes derivadas implementem os atributos e métodos definidos nela.
Classes abstratas também podem herdar de outras classes abstratas e uma classe abstrata pode ser herdada por uma classe concreta (i.e., classes instanciáveis, como Pessoa, Trabalhador, Estudante, Pilha<T>, etc.).
Um bom exemplo de classe abstrata é a classe Animal, uma vez que esta classe em si é uma abstração de todas as espécies de animais, e consequentemente, não existe no mundo real um animal que seja apenas do tipo Animal, e sim “animais concretos” que são de alguma raça e espécie específica (e.g., pastor alemão, harpia, pônei, etc., note que esses animais também pertencem a outras classes abstratas, sendo estas cachorro, ave e cavalo, respectivamente, que também herdam de Animal), ou seja, que pertencem a alguma classe concreta derivada de Animal. O Exemplo 33 ilustra a implementação da classe abstrata Animal:
Exemplo 33:
abstract class Animal
{
public bool EstaDormindo;
public bool EstaFaminto;
public abstract void Dormir();
public abstract void Acordar();
public abstract void Comer();
}
abstract class Cachorro : Animal
{
public int Patas;
public bool Calda;
public bool Macho;
public abstract void Latir();
public abstract void Correr();
}
class PastorAlemao : Cachorro
{
//implementação dos métodos abstratos de forma
//especifica para esse tipo de Animal/Cachorro
//bem como definição de atributos
//e métodos próprios desse tipo
}