Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Sobrescrita

Foi explicado que a maneira correta de escrever um código, seria não repetir atributos iguais em diversas classes. Pq no video a função getBonificacao foi repetida na classe Gerente se ambas davam um "return salario" ?

E mesmo que tivesse um atributo diferente, isso não é uma má pratica? Repetir funções iguais em classes diferentes?

Ou eu que entendi errado?

4 respostas

Boa tarde wolneypk,

Na classe funcionário temos o método getBonificacao assim:

public double getBonificacao() {
    return this.salario * 0.1;
}

A bonificação padrão de todo funcionário é 10% de seu salário. Porém queremos que a bonificação do gerente seja diferente, ele recebe 100% do salário de bonificação, portanto na classe gerente vamos reescrever o método getBonificacao, assim:

public double getBonificacao() {
    return super.salario;
}

Se o código fosse exatamente igual não faria sentido reescrever o método, mas como queremos atingir um resultado diferente da classe funcionário essa alternativa vale a pena.

Abraços

Boa noite! Como vai?

O método getBonificacao() ocorre na classe Gerente e na classe Funcionario, mas são implementações diferentes como pode ser visto a seguir:

public class Gerente extends Funcionario {

        // restante do código omitido.

        public double getBonificacao() {
            return super.salario;
        }
}
public class Funcionario {

        // restante do código omitido.

        public double getBonificacao() {
            return this.salario * 0.1;
        }
}

Portanto, não é uma má prática o que foi feito!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!

Fala Gabriel e Vinicius! Eu realmente havia me confundido. Eles tem atributos diferentes.

Mas acho que agora entendi a sobrescrita... Ele não criou uma nova função com outro nome, tipo "getBonificacao2" pra que essa função ficasse "atrelada" a função da classe mãe, porém, com um atributo diferente:

return super.salario;

Pra exatamente, não cair na má pratica de ficar criando mil e uma coisas iguais. Estou certo? É isso mesmo?

solução!

Exato, se o método não fosse reescrito a classe Gerente herdaria o método getBonificacao da classe funcionario. Mas como foi dito queremos que o comportamento do getBonificacao seja diferente no Gerente, portanto a alternativa foi reescrever esse método.

Como o método foi reescrito quanto fizermos:

Gerente gerente = new Gerente();
gerente.getBonificacao();

O método getBonificacao chamado será o da classe Gerente e não de Funcionário.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software