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

[Dúvida] Como estabelecer um valor diferente de atributo para as classes filhas

No caso da criação da super classe Funcionário e as classes filhas, Gerente, Designer e Editor de Vídeo. Se quiséssemos estabelecer um salário fixo para cada classe filha, sem usar um parâmetro no construtor, o melhor seria criar construtores sem parâmetro e a partir daí chamar o setSalario() no corpo do construtor? Esse é a forma mais eficiente de se fazer?

Exemplo:

public abstract class Funcionario {

    private double salario;

    public void setSalario(double salario) {
        this.salario = salario;
    }
}


public class Designer extends Funcionario {

    public Designer() {
        this.setSalario(2000.0);
    }

}
3 respostas

Oi Luis, tudo bem?

Há diversas formas de fazer o que você comentou. Acho que a que mais utiliza as propriedades da Orientação a Objetos seria ter um construtor com parâmetros na classe abstrata e depois usar a palavra chave super para chamar esse construtor, passando um salário fixo:

public abstract class Funcionario {

    private double salario;

    public Funcionario(double salario){
        this.salario = salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }
}

public class Designer extends Funcionario {

    public Designer() {
        super(2000.0);

    }

}

Caso o "sem parâmetros no construtor" que você citou seja na classe mãe e o atributo salario realmente tiver que ser privado, sua observação está correta: precisamos usar um setSalario() dentro do construtor da classe filha. Porém, se pudermos mudar o atributo para protected, fazemos isso e podemos setar o atributo normalmente nas classes filhas, fazendo this.salario = 2000.0.

Tudo vai depender das necessidades do nosso programa.

Espero ter ajudado, abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Testei aqui e acho que entendi. Só pra ter certeza: da mesma que podemos chamar um construtor dentro de outro construtos (pra não repertirmos código, supondo que criamos mais de um construtor na classe), quando chamamos super(2000.0) na classe filha Designer, estamos nos referindo ao construtor da classe mãe e por isso tudo compila?

solução!

Isso mesmo, Luis! Usamos a palavra chave super sempre para nos referirmos à classe mãe. Geralmente, utilizamos bastante no construtor, como nesse exemplo que dei.

Para ter mais detalhes sobre isso, dá uma olhadinha na segunda aula do curso, em que o Nico dá vários outros exemplos. :)