Médio Java
Sobrescrita com @Override
Enunciado
Crie uma classe Funcionario com atributos nome e salario, e um método calcularBonus() que retorna 10% do salário. Depois, crie a classe Gerente que estende Funcionario e sobrescreve calcularBonus() para retornar 20% do salário. No main, crie um Funcionario e um Gerente, e imprima o bônus de cada um.
Requisitos
- A classe
Funcionariodeve ter construtor que recebe nome e salário. - O método
calcularBonus()emFuncionarioretornasalario * 0.1. - A classe
GerentesobrescrevecalcularBonus()com@Overridee retornasalario * 0.2. - O programa deve imprimir os bônus corretamente.
Código inicial
class Funcionario {
// seu código aqui
}
class Gerente extends Funcionario {
// seu código aqui
}
public class Main {
public static void main(String[] args) {
// crie os objetos e imprima os bônus
}
}
Saída esperada
Bônus do funcionário: 500.0
Bônus do gerente: 2000.0
Ver dica
Use @Override antes do método calcularBonus() em Gerente para garantir que está sobrescrevendo corretamente.
Mostrar solução
class Funcionario {
protected String nome;
protected double salario;
public Funcionario(String nome, double salario) {
this.nome = nome;
this.salario = salario;
}
public double calcularBonus() {
return salario * 0.1; // 10% de bônus
}
}
class Gerente extends Funcionario {
public Gerente(String nome, double salario) {
super(nome, salario);
}
@Override
public double calcularBonus() {
return salario * 0.2; // 20% de bônus
}
}
public class Main {
public static void main(String[] args) {
Funcionario f = new Funcionario("Ana", 5000);
Gerente g = new Gerente("Carlos", 10000);
System.out.println("Bônus do funcionário: " + f.calcularBonus());
System.out.println("Bônus do gerente: " + g.calcularBonus());
}
}
Passo a passo
- A classe
Funcionariotem os atributosnomeesalario(protected para permitir acesso na subclasse). - O método
calcularBonus()retorna 10% do salário. - A classe
GerenteestendeFuncionarioe chamasuper(nome, salario)no construtor. - O método
calcularBonus()é sobrescrito com@Override, retornando 20% do salário. - No
main, criamos umFuncionarioe umGerentecom salários diferentes. - Imprimimos os bônus; o método chamado é o da classe real do objeto (polimorfismo).
Por que funciona
A sobrescrita permite que uma subclasse forneça uma implementação específica para um método herdado. Com @Override, o compilador verifica se a assinatura corresponde a um método da superclasse, evitando erros de digitação. O polimorfismo garante que a versão correta seja executada em tempo de execução.
Erros comuns
- Esquecer
@Override: se a assinatura estiver errada, o método não sobrescreve e o comportamento antigo é mantido. - Alterar a assinatura (ex.:
calcularBonus(int x)): isso cria uma sobrecarga, não sobrescrita. - Usar
privateno método da superclasse: não pode ser sobrescrito.
Outra forma de resolver
Poderia-se usar classes abstratas ou interfaces, mas para este exemplo simples, herança com sobrescrita é suficiente.
Saída esperada
Bônus do funcionário: 500.0
Bônus do gerente: 2000.0