📔 6.1 Qual o tipo de cada Livro?
🎯 Objetivo
Compreender o papel das Classes Abstratas na modelagem de sistemas, aprendendo a impedir a criação de instâncias de conceitos puramente teóricos (como um “Livro” genérico) e forçando o uso de tipos concretos (Ebook, LivroFisico).
🏗️ O Conceito: Classes Abstratas
Em nossa livraria, um Livro serve como base para atributos comuns (nome, valor, autor). No entanto, não faz sentido vender um “Livro” que não seja físico nem digital.
Ao marcar uma classe com o modificador abstract, impedimos que ela seja instanciada via new, garantindo que apenas suas subclasses (filhas) sejam comercializadas.
💻 Mão na Massa
Passo 1: Tornando a Classe Abstrata
Utilizamos a palavra-chave abstract na assinatura da classe:
public abstract class Livro {
private String nome;
private double valor;
// Construtores, Getters e Setters continuam aqui
}Passo 2: O Impacto no Código
Tentar criar um livro genérico resultará em erro de compilação:
// ❌ ERRO: Cannot instantiate the type Livro
Livro livro = new Livro(autor); O código deve agora utilizar os tipos concretos:
public class CadastroDeLivros {
public static void main(String[] args) {
// ✅ CORRETO: Criando um tipo específico que herda de Livro
Livro livro = new LivroFisico(autor);
livro.setNome("Java 17 Prático");
livro.setValor(59.90);
System.out.println("Livro cadastrado com sucesso!");
}
}✅ Resultado Esperado
O compilador Java garantirá a integridade do domínio, impedindo a existência de objetos “incompletos” e forçando o desenvolvedor a escolher uma especialização do livro.
Herança e Polimorfismo 🛡️
Mesmo que você não possa dar
newemLivro, ele continua sendo uma referência válida. O métodocarrinho.adiciona(Livro livro)aceitará tanto umEbookquanto umLivroFisicograças ao polimorfismo.
🚨 Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
Cannot instantiate type | Tentativa de usar new em classe abstrata. | Mude para new Subclasse(). |
| Perda de métodos no objeto | Esquecer de declarar métodos abstratos na classe pai. | Se o pai não tem o método, você não o acessa via referência Livro. |
🔗 Próximo Capítulo
Agora que você domina abstrações, vamos ver como criar Métodos Abstratos.