Estou com a seguinte dificuldade tenho uma classe funcionario com duas subclasses functipo1 e functipo2. todos os funcionários são cadastrados em um ArrayList
functipo1 e functipo2 possuem algumas variáveis distintas. Ex
[color=red]
thread "main" java.lang.ClassCastException: funcionario.functipo1 cannot be cast to funcionario.functipo2
at funcionarios.Folhadepagamento.listaFuncionariosComissionados(Folhadepagamento.java:76)
at funcionarios.Main.main(Main.java:222)[/color]
Não resolve?
Aliás, cuidado com o instanceof. Se você comparar com uma classe que é superclasse da que forneceu o objeto, ele irá retornar true e executar o bloco dentro do if.
rmendes08
Para você testar a classe de um objeto basta utilizar o operador instanceof. Mas na minha opinião, isso deve ser usado somente para fazer um downcasting seguro, e nunca usar para implementar regras de negócio.
No seu caso, eu acho que a herança é desnecessária. É melhor fazer uma única classe Funcionario com os campos salario e comissao. Para saber se o funcionario tem comissão basta testar (comissao > 0.0).
drsmachado
rmendes08:
Para você testar a classe de um objeto basta utilizar o operador instanceof. Mas na minha opinião, isso deve ser usado somente para fazer um downcasting seguro, e nunca usar para implementar regras de negócio.
No seu caso, eu acho que a herança é desnecessária. É melhor fazer uma única classe Funcionario com os campos salario e comissao. Para saber se o funcionario tem comissão basta testar (comissao > 0.0).
Pelo que o autor do tópico colocou, ambos possuem os mesmos atributos, apenas o nome de um deles é que muda (de salário para comissão).
Sendo assim, eu não faria distinção, colocaria como nome do atributo “remuneração” e pronto.
L
luiusique
O problema [color=darkblue]drsmachado[/color] e que não são iguais pois salario e fixo e comissão vem de outras variáveis como venda e porcentagem e bonus. e tambem nao tem como fazer na mesma classe funcionario pois esse foi apenas um exemplo mas existem outras diferenças e metodos diferentes construidos em cada classe inclusive outras subclasses.
utilizando o instaceof funcionou mais nao entendi [color=darkblue]rmendes08[/color] o porque de nao ser ideal este uso. porque este metodo de imprimir e apenas um dos que pretendia usar esta soloçao. tem outros tambem como ligar uma venda a um vendedor
Outra forma, mais recomendável, é injetar o cálculo dessas coisas usando uma outra classe. Crie uma interface para o cálculo de salários, bônus etc. e crie duas classes que implementam essa interface: uma para comissionados e outra para assalariados. Crie uma instância de cada classe (pode ser singleton, dependendo do tipo de cálculo a ser feito).
Então, quando você instancia um Funcionario, pode atribuir uma instância dessa classe que faz o cálculo de salários.
Outra forma, mais recomendável, é injetar o cálculo dessas coisas usando uma outra classe. Crie uma interface para o cálculo de salários, bônus etc. e crie duas classes que implementam essa interface: uma para comissionados e outra para assalariados. Crie uma instância de cada classe (pode ser singleton, dependendo do tipo de cálculo a ser feito).
Então, quando você instancia um Funcionario, pode atribuir uma instância dessa classe que faz o cálculo de salários.
tudo isso já foi feito e esta funcionando unica duvida que me surgiu agora e [color=darkblue]rmendes08[/color] falou que nao e um uso ideal para o instanceof
ViniGodoy
Por favor, ao postar tópicos, não deixe todas as letras do título MAIÚSCULAS.