AULA 12 MÓDULO 3 abstração ⏱ 50 min

Classes Abstratas

abstract class: contrato parcial com estado. Template Method pattern: esqueleto fixo, passos variáveis. Comparativo completo com interface.

abstract classabstract methodTemplate MethodfinalIS-Ainversão de controle

Classes abstratas — o contrato parcial

Classe abstrata é um contrato parcialmente implementado. Pode ter estado, construtores, métodos completos E métodos abstratos que as subclasses devem implementar.

CaracterísticaClasse abstrataInterface
Instanciar diretamente?NãoNão
Atributos de instância?SimNão (só constantes)
Construtores?SimNão
Implementação parcial?Simdefault methods apenas
Quantas por classe?1 (extends)Várias (implements)
Relação semânticaIS-ACAN-DO

Template Method pattern

A superclasse define o esqueleto do algoritmo. As subclasses preenchem os passos variáveis. A superclasse chama métodos das subclasses — inversão de controle.

Hollywood Principle
Don't call us, we'll call you. A subclasse não sabe quando será chamada — a superclasse orquestra. Isso é inversão de controle aplicado ao Template Method.
java
// Template Method — Relatório com esqueleto fixo

public abstract class Relatorio {
    // Método template — final: ninguém pode sobrescrever o esqueleto
    public final void gerar() {
        cabecalho();
        gerarCorpo(); // passo variável — cada subclasse implementa
        rodape();
    }

    private void cabecalho() {
        System.out.println("=== IF Goiano · Campus Rio Verde ===");
    }

    protected abstract void gerarCorpo(); // DEVE ser implementado

    private void rodape() {
        System.out.println("Profa. Andrea Barboza Proto Sardi");
    }
}

public class RelatorioVendas extends Relatorio {
    @Override
    protected void gerarCorpo() {
        System.out.println("RELATÓRIO DE VENDAS | Total: R$ 15.840,00");
    }
}

public class RelatorioAlunos extends Relatorio {
    @Override
    protected void gerarCorpo() {
        System.out.println("RELATÓRIO DE ALUNOS | Matriculados: 42");
    }
}

// Polimorfismo + Template Method
List.of(new RelatorioVendas(), new RelatorioAlunos())
    .forEach(Relatorio::gerar);
quiz · aula 12
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Por que new Relatorio() não compila?
QUESTÃO 02
Por que o método gerar() usa 'final'?
QUESTÃO 03
Quando escolher classe abstrata em vez de interface?
0/3