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

}