Numeração de ponto flutuante é por natureza imprecisa
, eu não gosto de dar respostas pela metade, mas nesse
caso a explicação é realmente complexa, use BigDecimal
para valores monetários (procure sobre essa classe no google).
Pelas minhas contas tem umas violações de Encapsulamento
no seu código. Em suma o ideal é que você declare os
membros sempre como private (só podem ser acessados
diretamente por funções da mesma classe) ou protected
(só podem ser acessados diretamente por funções da
mesma classe ou classes decendentes). Ou seja, algo como:
private cargo = new Cargo();
public getCargo(){ return cargo; }
public setCargo( Cargo novoCargo ){ this.cargo = novoCargo; }
e para acessar depois
medio.getCargo().setCodigo( novoCodigo ) ao invés de medio.carg.setcodigo
(Aliás, esse código está funcionando? porque pelas minhas
contas carg n seria acessível em main).
Nesse caso você pode usar protected (se já tiverem estudado
protected obviamente) e cologar o getCargo apenas na classe
derivada, uma dica é que o seu editor quase certamente gera
automaticamente os getters e setters, basta declarar os membros.
Eu não sei se o seu professor vai cobrar isso, mas você pode
melhorar a nomenclatura, procure por padrão de nomenclatura
java, isso n influencia diretamente no programa, mas melhora
muito o entendimento, basicamente use sempre:
getNome ao invés de getnome
Verbos no infinitivo (concederBonus ao invés de concedeBonus).
Um esboço...
class MinhaClasse{
private propriedade = new OutraClasse();
public NomeClasse getPropriedade(){...
public void setPropriedade( NomeClasse valor ){...
public void executarCalculo(){....
...
}
Dicas de estudo para você: Encapsulamento em java e
Camel Case (o dito padrão de nomenclatura).
Deve ter alguns erros aí, é só para te dar umas
pistas, faz muitos anos que não programo em java.
Boa sorte e que a força esteja contigo.