Analise a classe a seguir retirada de uma aplicação Java que...

Próximas questões
Com base no mesmo assunto
Ano: 2013 Banca: FCC Órgão: DPE-SP Prova: FCC - 2013 - DPE-SP - Programador de computador |
Q304599 Programação
Analise a classe a seguir retirada de uma aplicação Java que contém as classes Empregado.java, Diarista.java e Start.java. A classe Start.java possui o método main:

package geral;
 public class Diarista extends Empregado{
   private int diasTrabalhados;
   public Diarista(int diasTrabalhados, int id, String nome, double valorReferencia) {
       super(id, nome, valorReferencia);
       this.diasTrabalhados = diasTrabalhados;
}
 public int getDiasTrabalhados() {
       return diasTrabalhados;
}
public void setDiasTrabalhados(int diasTrabalhados) {
       this.diasTrabalhados = diasTrabalhados;
}
@Override
 public double obterSalario(){
       return super.getValorReferencia() * diasTrabalhados;
}
 public double obterSalario(double percentualAcrescimo){
       double salario= this.obterSalario();
       double salarioReajustado = salario + salario * percentualAcrescimo /100;
       return salarioReajustado;
}
 public double obterSalario(double adicional, double desconto){
       return this.obterSalario() + adicional - desconto;
}
}

Analisando o código apresentado é possível concluir que
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B - o método obterSalario() foi sobrescrito da classe Empregado.

Vamos discutir o conceito aplicado na questão e entender por que essa alternativa é a correta. O código apresentado exemplifica o uso de herança e polimorfismo na linguagem de programação Java. A classe Diarista estende a classe Empregado, o que significa que Diarista herda os atributos e métodos da classe Empregado, mas também pode definir seus próprios métodos ou sobrescrever os existentes.

O conceito de sobrescrita de métodos (ou method overriding), que é central para essa questão, ocorre quando uma subclasse define um método que já existe na superclasse. Neste caso, o método obterSalario() da classe Diarista é uma sobrescrita do método com o mesmo nome na classe Empregado. A anotação @Override é uma dica para o compilador e para outros desenvolvedores de que o método é uma sobrescrita intencional de um método da superclasse.

A sobrescrita permite que a classe Diarista forneça sua própria implementação para o cálculo do salário, que leva em consideração os diasTrabalhados, um atributo específico da classe Diarista. Isto é diferente do que poderia estar definido na classe Empregado, permitindo assim comportamentos especializados de acordo com o tipo de empregado.

A instrução super(id, nome, valorReferencia); é um chamado ao construtor da superclasse Empregado, que inicializa os atributos herdados. Esta chamada é obrigatória quando a superclasse não possui um construtor padrão (sem argumentos) e espera que determinados valores sejam inicializados ao criar um objeto da subclasse.

Por fim, é importante notar que a existência de métodos com o mesmo nome, mas diferentes listas de parâmetros (como obterSalario() e obterSalario(double percentualAcrescimo)) é, na verdade, um exemplo de sobrecarga de métodos (ou method overloading), e não sobrescrita. A sobrecarga permite que vários métodos com o mesmo nome coexistam, desde que eles tenham assinaturas únicas (ou seja, diferentes parâmetros).

Portanto, a alternativa B está correta porque indica corretamente que o método obterSalario() foi sobrescrito na classe Diarista para refletir o cálculo do salário específico para essa subclasse, que é diferente do cálculo para outros tipos de empregados que podem estar definidos na superclasse Empregado.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

a) Alternativa ERRADA. É possível criar diversos métodos com o mesmo nome, contanto que seus parâmetros sejam diferentes (na linguagem mais correta, equivale a dizer contanto que sua assinatura seja diferente). Esse conceito em Orientação a Objetos chama-se sobrecarga.

b) Alternativa CORRETA. A classe Diarista estende a classe Empregado, que no exemplo podemos assumir que já possuia seu próprio método obterSalario(). Através da anotação @Override é explicitado que seu comportamento deve ser sobrescrito pelo da sub-classe (Diarista).

c) Alternativa ERRADA. A instrução super passa estes valores para o construtor da super-classe (Empregado).

d) Alternativa ERRADA. A instrução super.getValorReferencia() chama esse método da super-classe (Empregado.java), e não da classe Start.java.

e) Alternativa ERRADA. Não confundir sobrescrita (@Override) com sobrecarga (conceito explicado acima).

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo