Classes abstratas

Classes abstratas são classes que têm zero ou mais métodos abstratos.
Métodos abstratos são métodos sem implementação, ou seja, sem código, e cuja implementação é feita por uma subclasse da classe abstrata.
Um classe é definida como abstrata com a palavra reservada abstract.
Um método é declarado abstrato igualmente com a palavra reservada abstract e sem qualquer implementação de código:

public abstract class Veiculo { 
   public abstract void acelera(); 

   public void trava(){ 
      System.out.println("Trava"); 
   } 
} 

A classe Veiculo foi declarada abstrata e tem dois métodos : o método abstrato acelera() e o método trava() que não é abstrato.
Como se pode ver pelo que foi dito na secção Polimorfismo de Herança, as classes abstratas forem pensadas para implementar o Polimorfismo de Herança.
O método abstrato acelera() será implementado por uma subclasse de Veiculo:

public class Carro extends Veiculo{ 
   public void acelera(){ 
      System.out.println("Carro Acelera"); 
   }     
} 

Características das classes abstratas:

  • Uma classe abstrata pode ter zero ou mais métodos abstratos, assim como métodos concretos.
  • Se uma classe tiver pelo menos um método abstrato ela deve ser declarada abstrata.  
  • Uma classe abstrata não pode ser instanciada.
  • Para usarmos uma classe abstrata teremos de criar uma subclasse dela que implemente todos os seus métodos abstratos.  
  • Uma subclasse de uma classe abstrata tem de implementar todos os métodos abstratos da classe abstrata ou ser declarada abstrata igualmente.
  • Uma classe abstrata pode ter métodos concretos, propriedades, getters e setters e construtores.