Classes abstratas são aquelas que não podem ser instanciadas diretamente, pois elas servem como modelos para outras subclasses.
Classes abstratas são úteis quando se deseja fornecer uma estrutura básica para um grupo de classes relacionadas, mas não faz sentido ter uma instância direta da classe base.
Uma classe abstrata pode conter métodos abstratos, que são declarados, mas não são implementados na classe abstrata. Esses métodos abstratos devem ser implementados pelas classes filhas.
As classes abstratas podem ter métodos concretos, campos de dados e construtores para serem utilizados pelas suas subclasses.
Exemplo
A classe abstrata é declarada com o modificador abstract. Ela também pode declarar métodos abstratos, para que as suas subclasses sejam obrigadas a escrever uma implementação.
Observações Finais
Não é permitido criar objetos de uma classe abstrata.
Qualquer classe que possua um método abstrato também deve ser declarada como abstrata.
Métodos definidos como abstratos simplesmente declaram a assinatura do método, porém sem definir a sua implementação.
A implementação de um método abstrato deve seguir a mesma (ou menos restritiva) visibilidade, isto é, um método abstrato protected deve ser implementado também como protected ou public (mas não private )
Exercícios
Exercício 1 - Criar a classe abstrata Pessoa que seja superclasse de ServidorPublico
Exercício 2- Criar o método abstrato exibirInformacoes() da classe Pessoa
abstract class Pessoa {
private String nome
public Pessoa(String nome){
this.nome = nome;
}
public String getNome() {
return nome;
}
// método abstrato para exibir informações específicas da pessoa
public abstract void exibirInformacoes();
}
package unidade4;
public abstract class Pessoa {
protected String primeiroNome;
protected String ultimoNome;
public abstract void exibirInformacoes();
}
package unidade4;
import java.util.LinkedList;
import java.util.List;
/**
* Classe que representa um Servidor Público.
*/
public class ServidorPublico extends Pessoa {
...
@Override
public void exibirInformacoes() {
primeiroNome = nome.split(" ")[0];
ultimoNome = nome.substring(nome.lastIndexOf(" ") + 1);
System.out.println("Nome: " + primeiroNome + " " + ultimoNome);
}
}
package unidade4;
public class App_v2 {
public static void main(String[] args) {
...
isabela.exibirInformacoes();
}
...
}