Eu tenho 3 classes:
gerente, vendedor que herdam funcionario
e eu tenho um atributo na minha classe Funcionario ( que botei como static )
minha classe Funcionario:
package model;
import java.util.Date;
public abstract class Funcionario {
private Departamento departamento;
private Endereco endereco;
private String nome,cpf,rg,usuario,senha;
private Date dataEntrada,dataSaida, dataNascimento;
private Double salario = 998.00;
public String getNome() {
return nome;
}
// metodos
public abstract double getBonificacao();
}
E cada herança de funcionario tem um salario diferente exemplo:
gerente terá 10% a mais do salario de funcionario
vendedor terá o salario minimo statico
outra possível classe que herdara funcionario Secretaria ( terá 5% a mais do valor de funcionario)
eu teria que colocar a minha classe getSalario como abstrata?
Alguém poderia me dar um exemplo?
Tinha me equivocado com a minha pergunta então reformulei .
Bom, tem algumas confusões aí mas acho que a resposta é bem simples.
Se todas as bonificações se baseiam no atributo salario você pode definí-lo como final, que não é a mesma coisa que estático.
Após isso cada subclasse simplesmente sobrescreve o méódo getBonificacao() com o valor que lhe cabe. E também seria bom não existir um método setSalario ja que tudo é automaticamente calculado.
Seria algo assim:
public class Vendedor extends Funcionario {
// ... outros métodos e definições
public double getBonificacao() {
return super.salario;
}
}
public class Secretaria extends Funcionario {
// ... outros métodos e definições
public double getBonificacao() {
return super.salario * 1.05;
}
}
public class Gerente extends Funcionario {
// ... outros métodos e definições
public double getBonificacao() {
return super.salario * 1.1;
}
}
1 curtida
opa mano vlw, quais confusões?
E isso do metodo getBonificação eu já tinha feito, eu só tava com dificuldade de como fazer com o atributo salario e o metodo salario
ex: um funcionario tem um salario já defindido ( salario minimo )
private Double salario = 998.00
;
um gerente tem um salario ( 10% a mais do salario minimo )
você acha que é meio desnecessário isso?
Seria o que eu fiz, mas o nome do método seria getSalario então.
O que é ou não desnecessário depende do problema que você está querendo resolver. Não faz muito sentido você querer mudar o valor de um atributo na estrutura de herança, faria mais sentido fazê-lo em um método como eu defini no exemplo.
Se o que eu estou dizendo não te ajuda tenta explicar o problema melhor. Porque é possível que eu não tenha entendido direito
eu acho que entendi
tipo eu tirei o metodo set ( não é possível setar o salário )
e a classe Funcionario tem o atributo salario já definido:
private Double salario = 998.00; ( eu não sei se precisaria por o static )
e tem o metodo getSalario
e então gerente teria
10% do valor desse salario ( creio que essa alternativa que você falou seja a correta, pensei nisso por que vou colocar para puxar de uma tabela do banco de dados), mas creio que seja mais fácil eu utilizar os setters / getters ( e pegar um valor do banco de dados e settar ) eu estou tentando complicar algo fácil? kkk
Quais são os seus requisitos? Pelo que eu estou vendo, esse parece ser um projeto acadêmico com o propósito de praticar e aprender. Nesse caso, pode fazer como achar melhor.
Se quiser puxar o valor do banco de dados pode seguir em frente, isso vai te dar problemas e te colocar em situações que você não esteve antes, e consequentemente você vai aprender com isso.
Agora se a pergunta é o que é mais simples, volto a dizer que depende dos seus requisitos.
Se os requisitos dizem que existe um salário base, e o salário de todos os cargos são dinâmicamente calculados a partir dele, você pode fazer como eu sugeri, e talvez setar o valor em um arquivo de propriedades caso não queira deixá-lo fixo no código.
Agora se os requisitos dizem que cada cargo tem seu salário específico, ou melhor, cada funcionário tem um salário específico (dizendo que certos gerentes podem ganhar mais do que outros), aí você pode optar por uma base de dados externa
1 curtida