Fala, meus consagrados! Beleza?
As classes abstratas permitem que programadores definam uma superclasse que não pode ser instanciada por si só, mas que pode servir como uma base para outras classes. Classes abstratas são especialmente úteis em situações onde se deseja compartilhar um conjunto comum de métodos e campos entre várias classes, mantendo alguns desses métodos abertos para implementações específicas pelas subclasses.
Uma classe é declarada abstrata usando a palavra-chave abstract. Uma vez declarada como abstrata, não pode ser instanciada diretamente, o que significa que não se pode criar um objeto dessa classe diretamente com o operador new.
Uma classe abstrata pode conter métodos abstratos. Esses métodos são declarados sem uma implementação e devem ser implementados por todas as subclasses não abstratas que herdam da classe abstrata.
Além de métodos abstratos, as classes abstratas também podem ter métodos concretos (métodos com implementações). Isso permite que as classes abstratas forneçam alguma funcionalidade básica compartilhada, enquanto deixam outros comportamentos para serem definidos pelas subclasses.
Como qualquer outra classe, uma classe abstrata pode ter atributos e construtores, permitindo que suas subclasses chamem o construtor da superclasse através do super().
As classes abstratas são úteis quando você tem uma base de classes que compartilham uma estrutura ou comportamento comum, mas também possuem métodos que devem ser individualmente adaptados pelas subclasses. Elas são uma maneira eficaz de impor um contrato para as subclasses em termos de métodos que essas subclasses precisam implementar, enquanto compartilha código comum.
Considere um sistema de uma biblioteca onde se tem várias categorias de membros (estudantes, professores e membros da comunidade) que podem emprestar livros. A classe base Membro pode ser abstrata, com alguns métodos definidos genericamente e outros que precisam ser específicos para cada categoria de membro.
Temos a seguinte classe abstrata:
abstract class Membro {
protected String nome;
protected int maxLivrosEmprestimos;
public Membro(String nome) {
this.nome = nome;
}
// Método abstrato: sem implementação.
public abstract void calcularQuota();
// Método concreto
public void mostrarDados() {
System.out.println("Nome: " + nome);
System.out.println("Quantidade máxima: " + maxLivrosEmprestimos);
}
}
Agora vamos criar uma subclasse da classe Membro:
class Estudante extends Membro {
public Estudante(String nome) {
super(nome);
calcularQuota();
}
@Override
public void calcularQuota() {
// Estudantes podem emprestar até 10 livros.
maxLivrosEmprestimos = 10;
}
}
Temos mais uma subclasse de Membro:
class Professor extends Membro {
public Professor(String nome) {
super(nome);
calcularQuota();
}
@Override
public void calcularQuota() {
// Professores podem emprestar até 20 livros.
maxLivrosEmprestimos = 20;
}
}
Agora vamos testar as classes:
public class Main {
public static void main(String[] args) {
Estudante estudante = new Estudante("Kal-El Araújo");
estudante.mostrarDados();
Professor professor = new Professor("Rogério Araújo");
professor.mostrarDados();
}
}
Resultado da execução do código:
Kal-El Araújo
Quantidade máxima: 10
Rogério Araújo
Quantidade máxima: 20
Classes abstratas em Java oferecem uma maneira robusta de criar um framework de classes que define regras para subclasses enquanto compartilha funcionalidades comuns. Elas são uma parte essencial da programação orientada a objetos, ajudando a reduzir a duplicação de código e a manter um design limpo e modular.
Espero que tenham gostado!
Forte abraço e até a próxima jornada!
_________________________
Professor Rogerão Araújo
Quer ficar por dentro dos concursos públicos abertos e previstos pelo Brasil? Clique nos links abaixo:
Receba gratuitamente no seu celular as principais notícias do mundo dos concursos. Clique no link abaixo e inscreva-se:
Participe da conversa