Sobrecarga (overloading) refere-se à capacidade de ter múltiplas versões de um método com o mesmo nome em uma classe, mas com diferentes listas de parâmetros.
No caso de herança, ocorre quando uma subclasse define um método com o mesmo nome do método herdado da superclasse, contudo com a sua assinatura diferente.
Anulação
Definição
Anulação (overriding) ocorre quando uma subclasse possui um método com a mesma assinatura que um método na superclasse.
A decisão de qual versão do método chamar é feita em tempo de execução com base no tipo de chamada (this ou super)
Métodos constantes (final) não podem ser anulados.
Exemplo
THIS e SUPER
this e super são usados quando for necessário referenciar explicitamente o objeto da classe (this) ou da superclasse (super)
Não confundir this e super com this() e super() Esse últimos são usados apenas em chamadas de construtores.
Exemplo
Exercícios
Exercício 1 - Anular o método toString() nas subclasses Estatutario, Comissionado e Temporario
Exercício 2 - Sobrescrever o método calcularSalarioHorasExtras() nas subclasses Estatutario, Comissionado e Temporario
Exercício 3 - Criar novos métodos (extensão) nas subclasses Estatutario, Comissionado e Temporario
class ServidorPublico {
protected int matricula;
public void mostrarDetalhes() {
System.out.println("Matrícula: " + matricula);
}
}
class Estatutario extends ServidorPublico {
private int tempoServico;
// Sobrecarga do método mostrarDetalhes para incluir tempo de serviço
public void mostrarDetalhes(int tempoServico) {
System.out.println("Matrícula: " + matricula);
System.out.println("Tempo de Serviço (em anos): " + tempoServico);
}
// Anulação do método mostrarDetalhes da superclasse
@Override
public void mostrarDetalhes() {
System.out.println("Matrícula: " + matricula);
System.out.println("Tempo de Serviço (em anos)
}
}