Herança e Classes Abstratas
extends, abstract e override
Herança permite que uma classe (subclasse) herde atributos e métodos de outra classe (superclasse) usando extends. A subclasse recebe tudo da superclasse e pode adicionar novos membros ou sobrescrever comportamentos com @Override. O construtor da superclasse é chamado com super().
Classes abstratas (abstract) não podem ser instanciadas diretamente — existem para serem herdadas. Podem ter métodos abstratos (sem implementação, que forçam as subclasses a implementar) e métodos concretos (que fornecem comportamento padrão). São úteis quando subclasses compartilham código mas diferem em partes específicas.
Java não permite herança múltipla de classes — uma classe só pode estender uma única classe. Para herdar de múltiplas fontes use interfaces, que suportam implements múltiplos.
// ── Classe abstrata ───────────────────────────────
public abstract class Forma {
protected String cor;
public Forma(String cor) { this.cor = cor; }
// Abstrato: OBRIGA subclasses a implementar
public abstract double calcularArea();
// Concreto: subclasses HERDAM (podem sobrescrever)
public void exibir() {
System.out.printf("Forma %s, área: %.2f%n", cor, calcularArea());
}
}
// ── Subclasse ─────────────────────────────────────
public class Circulo extends Forma {
private double raio;
public Circulo(double raio, String cor) {
super(cor); // chama construtor da superclasse
this.raio = raio;
}
@Override
public double calcularArea() {
return Math.PI * raio * raio;
}
}
public class Retangulo extends Forma {
private double largura, altura;
public Retangulo(double l, double a, String cor) {
super(cor);
this.largura = l; this.altura = a;
}
@Override
public double calcularArea() { return largura * altura; }
}
// Forma naoFunciona = new Forma("azul"); // ❌ abstrata!
Circulo c = new Circulo(5, "vermelho");
c.exibir(); // Forma vermelho, área: 78,54Prefira composição a herança quando possível ("favor composition over inheritance"). Herança cria acoplamento forte — se a superclasse mudar, as subclasses podem quebrar.