Classes e Métodos Abstratos em Java: Guia Completo
Classes e Métodos Abstratos em Java
Este tutorial fornece uma exploração clara, orientada a exemplos, de classes e métodos abstratos em Java, e explica como a abstração é implementada.
Classe Abstrata em Java
Em Java, uma classe abstrata não pode ser instanciada. A palavra-chave abstract marca a classe como abstrata. Por exemplo,
// criar classe abstrata abstract class Linguagem { // campos e métodos } ... // tentar criar objeto Linguagem // lança erro Linguagem obj = new Linguagem();
Uma classe abstrata pode conter tanto métodos concretos (regulares) quanto métodos abstratos. Por exemplo,
abstract class Linguagem { // método abstrato abstract void metodo1(); // método regular void metodo2() { System.out.println("Este é método regular"); } }
Para mais sobre métodos regulares, veja Métodos em Java.
Método Abstrato em Java
Um método abstrato não tem corpo; declara um contrato que subclasses devem cumprir. É definido com a palavra-chave abstract, ex:
abstract void exibir();
Como não tem corpo, a declaração termina com ponto e vírgula. Se uma classe declara um método abstrato, a própria classe deve ser declarada abstrata, caso contrário o compilador lança erro:
// erro // classe deve ser abstrata class Linguagem { // método abstrato abstract void metodo1(); }
Exemplo: Classe e Método Abstrato em Java
Embora classes abstratas não possam ser instanciadas diretamente, subclasses concretas podem estendê-las e usar seus membros. Por exemplo,
abstract class Linguagem { public void exibir() { System.out.println("Esta é Programação Java"); } } class Main extends Linguagem { public static void main(String[] args) { Main obj = new Main(); obj.exibir(); } }
Saída
Esta é programação Java
Aqui, a classe abstrata Linguagem define um método concreto exibir(). A subclasse Main herda esse método e o invoca através de sua instância.
Implementando Métodos Abstratos
Quando uma classe abstrata declara um método abstrato, toda subclasse concreta deve fornecer implementação. Por exemplo,
abstract class Animal { abstract void fazerSom(); public void comer() { System.out.println("Posso comer."); } } class Cachorro extends Animal { public void fazerSom() { System.out.println("Au au"); } } class Main { public static void main(String[] args) { Cachorro c1 = new Cachorro(); c1.fazerSom(); c1.comer(); } }
Saída
Au au Posso comer.
A subclasse Cachorro implementa o método abstrato fazerSom(), enquanto herda o método concreto comer().
Nota: Se Cachorro não sobrescrever fazerSom(), ele próprio deve ser declarado abstrato.
Acessando Construtor de Classes Abstratas
Classes abstratas podem definir construtores como classes normais. Subclasses invocam o construtor da superclasse usando super(). Por exemplo,
abstract class Animal { Animal() { // lógica de inicialização } } class Cachorro extends Animal { Cachorro() { super(); // inicialização adicional } }
Lembre-se que super() deve ser a primeira instrução no construtor da subclasse.
Abstração em Java
Classes e métodos abstratos são as ferramentas primárias para alcançar abstração em Java. Abstração esconde detalhes de implementação desnecessários, apresentando apenas a interface essencial ao usuário. Isso simplifica sistemas complexos e promove flexibilidade.
Por exemplo, um freio de motocicleta realiza a mesma função de alto nível — desacelerar a moto — enquanto seu mecanismo interno pode diferir entre modelos.
Exemplo 3: Abstração em Java
abstract class Moto { abstract void frear(); } class MotoEsportiva extends Moto { public void frear() { System.out.println("Freio MotoEsportiva"); } } class MotoMontanha extends Moto { public void frear() { System.out.println("Freio MotoMontanha"); } } class Main { public static void main(String[] args) { MotoMontanha m1 = new MotoMontanha(); m1.frear(); MotoEsportiva s1 = new MotoEsportiva(); s1.frear(); } }
Saída:
Freio MotoMontanha Freio MotoEsportiva
Cada subclasse concreta fornece sua própria implementação de frear(), ilustrando como abstração desacopla interface de implementação.
Nota: Interfaces também podem ser usadas para alcançar abstração em Java.
Pontos-Chave para Lembrar
- Use a palavra-chave
abstractpara declarar classes e métodos abstratos. - Um método abstrato não tem corpo; termina com ponto e vírgula.
- Classes contendo métodos abstratos devem ser elas mesmas abstratas.
- Classes abstratas não podem ser instanciadas diretamente.
- Subclasses concretas herdam classes abstratas e fornecem implementações para métodos abstratos.
- Subclasses devem sobrescrever todos os métodos abstratos a menos que sejam declaradas abstratas.
- Membros estáticos de uma classe abstrata podem ser acessados via nome da classe:
Animal.metodoEstatico();
Java
- Dominando Classes e Métodos Abstratos em C#: Guia Prático
- Variáveis e Literais em Java: Guia Completo
- Classes e Objetos em Java: Guia Prático
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Dominando Classes Aninhadas e Internas em Java: Tipos, Exemplos e Boas Práticas
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos