💻 Exemplos: Capítulo 09: Herança, Polimorfismo, Classes Abstratas e Métodos Virtuais
Especialização em Sistemas com Java 21 LTS • Capítulo 09
🎯 Visão Geral dos Exemplos Práticos
Neste laboratório prático, implementaremos exemplos corporativos completos explorando:
- Hierarquia de Classes e Sobrescrita de Métodos (
@Override): especialização de comportamentos através da palavra-chavesuper. - Despacho Dinâmico de Métodos Polimórficos: processamento em lote de instâncias heterogêneas através de um tipo estático abstrato comum.
- Validação do Princípio de Substituição de Liskov (LSP): garantia de que qualquer subtipo atenda aos contratos da superclasse sem falhas ou coerções forçadas.
💻 Exemplo 01 — Sistema Corporativo de Remuneração e Bonificação
package com.empresa.heranca;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
/**
* Sistema de recursos humanos corporativo demonstrando polimorfismo dinâmico.
*/
public class GestorRemuneracaoPolimorfica {
public static abstract class Funcionario {
private final String matricula;
private final String nome;
private final BigDecimal salarioBase;
public Funcionario(String matricula, String nome, BigDecimal salarioBase) {
this.matricula = matricula;
this.nome = nome;
this.salarioBase = salarioBase;
}
// Método polimórfico abstrato
public abstract BigDecimal calcularBonificacaoAnual();
// Método concreto base reaproveitável
public BigDecimal calcularRemuneracaoLiquida() {
BigDecimal aliquotaInssIrrf = new BigDecimal("0.22"); // Média tributária 22%
BigDecimal deducoes = salarioBase.multiply(aliquotaInssIrrf);
return salarioBase.subtract(deducoes).setScale(2, RoundingMode.HALF_EVEN);
}
public String getMatricula() { return matricula; }
public String getNome() { return nome; }
public BigDecimal getSalarioBase() { return salarioBase; }
}
public static class EngenheiroDevOps extends Funcionario {
private final int certificacoesCloud;
public EngenheiroDevOps(String matricula, String nome, BigDecimal salarioBase, int certificacoesCloud) {
super(matricula, nome, salarioBase);
this.certificacoesCloud = certificacoesCloud;
}
@Override
public BigDecimal calcularBonificacaoAnual() {
// Bonificação: 1 salário base + R$ 1.500 por certificação ativa
BigDecimal adicionalCert = new BigDecimal("1500.00").multiply(new BigDecimal(certificacoesCloud));
return getSalarioBase().add(adicionalCert);
}
}
public static class GerenteProjetos extends Funcionario {
private final int projetosEntreguesNoPrazo;
public GerenteProjetos(String matricula, String nome, BigDecimal salarioBase, int projetosEntreguesNoPrazo) {
super(matricula, nome, salarioBase);
this.projetosEntreguesNoPrazo = projetosEntreguesNoPrazo;
}
@Override
public BigDecimal calcularBonificacaoAnual() {
// Bonificação: 1.5 salários + 5% por projeto entregue no prazo
BigDecimal fatorBase = getSalarioBase().multiply(new BigDecimal("1.50"));
BigDecimal fatorProjetos = getSalarioBase().multiply(new BigDecimal("0.05"))
.multiply(new BigDecimal(projetosEntreguesNoPrazo));
return fatorBase.add(fatorProjetos).setScale(2, RoundingMode.HALF_EVEN);
}
}
public static class DiretorOperacoes extends Funcionario {
private final BigDecimal percentualEbitda;
public DiretorOperacoes(String matricula, String nome, BigDecimal salarioBase, BigDecimal percentualEbitda) {
super(matricula, nome, salarioBase);
this.percentualEbitda = percentualEbitda;
}
@Override
public BigDecimal calcularBonificacaoAnual() {
// Bonificação baseada em lucro corporativo (ex: R$ 5.000.000 de EBITDA)
BigDecimal ebitdaCorporativo = new BigDecimal("5000000.00");
return ebitdaCorporativo.multiply(percentualEbitda).setScale(2, RoundingMode.HALF_EVEN);
}
}
public static void main(String[] args) {
System.out.println("================================================================================");
System.out.println(" PROCESSAMENTO POLIMÓRFICO DE BENEFÍCIOS CORPORATIVOS (JAVA 21) ");
System.out.println("================================================================================");
List<Funcionario> colaboradores = List.of(
new EngenheiroDevOps("ENG-401", "Guilherme Santos", new BigDecimal("11500.00"), 3),
new GerenteProjetos("PM-202", "Juliana Martins", new BigDecimal("14200.00"), 4),
new DiretorOperacoes("DIR-001", "Marcus Valério", new BigDecimal("32000.00"), new BigDecimal("0.015"))
);
System.out.printf("%-8s | %-20s | %-12s | %-12s | %-14s%n",
"MATR.", "COLABORADOR", "SALÁRIO BASE", "LÍQUIDO MÊS", "BÔNUS ANUAL");
System.out.println("---------+----------------------+--------------+--------------+---------------");
BigDecimal totalFolhaBase = BigDecimal.ZERO;
BigDecimal totalProvisaoBonus = BigDecimal.ZERO;
for (Funcionario f : colaboradores) {
// Invocação polimórfica: a JVM despacha para a implementação exata de cada subclasse
BigDecimal bonus = f.calcularBonificacaoAnual();
BigDecimal liquido = f.calcularRemuneracaoLiquida();
totalFolhaBase = totalFolhaBase.add(f.getSalarioBase());
totalProvisaoBonus = totalProvisaoBonus.add(bonus);
System.out.printf("%-8s | %-20s | R$ %10.2f | R$ %10.2f | R$ %11.2f%n",
f.getMatricula(), f.getNome(), f.getSalarioBase(), liquido, bonus);
}
System.out.println("--------------------------------------------------------------------------------");
System.out.printf("Custo Mensal Consolidado (Base) : R$ %,11.2f%n", totalFolhaBase);
System.out.printf("Provisão Total de PLR & Bônus : R$ %,11.2f%n", totalProvisaoBonus);
System.out.println("================================================================================");
}
}
📋 Resultado Esperado no Console
================================================================================
PROCESSAMENTO POLIMÓRFICO DE BENEFÍCIOS CORPORATIVOS (JAVA 21)
================================================================================
MATR. | COLABORADOR | SALÁRIO BASE | LÍQUIDO MÊS | BÔNUS ANUAL
---------+----------------------+--------------+--------------+---------------
ENG-401 | Guilherme Santos | R$ 11500.00 | R$ 8970.00 | R$ 16000.00
PM-202 | Juliana Martins | R$ 14200.00 | R$ 11076.00 | R$ 24140.00
DIR-001 | Marcus Valério | R$ 32000.00 | R$ 24960.00 | R$ 75000.00
--------------------------------------------------------------------------------
Custo Mensal Consolidado (Base) : R$ 57.700,00
Provisão Total de PLR & Bônus : R$ 115.140,00
================================================================================