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

Não consigo dar get no salário

Bom dia,

Alterei o salário do meu funcionário para private. Quando compilo o código abaixo não ocorre erro nenhum, porém quando tento executar o programa, demonstra o seguinte erro:

Exception in thread "main" java.lang.IllegalAccessError: tried to access field Funcionario.salario from class TestaFuncionario at TestaFuncionario.main(TestaFuncionario.java:71)

class Funcionario{
    String nome;
    String departamento;
    private double salario;
    String rg;
    Data dataDeEntrada;

    public void setAumento(double valor){
        this.salario += valor;
    }

    public double calculaGanhoAnual(){
        return this.salario *= 12;
    }


    public void getFuncionario(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario: " + getSalario());
        System.out.println("Dia: " + this.dataDeEntrada.dia);
        System.out.println("Mês: " + this.dataDeEntrada.mes);
        System.out.println("Ano: " + this.dataDeEntrada.ano);
        System.out.println("Data de Entrada: " + this.dataDeEntrada.getFormatada());
        System.out.println("RG: " + this.rg);
        System.out.println("Ganho Anual: " + this.calculaGanhoAnual());

    }

    public double getSalario(){
        return this.salario;
    }

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


}

class Data{
    int dia;
    int mes;
    int ano;

    public void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}

class Empresa{
    String nome;
    String cnpj;
    Funcionario[] funcionarios;
    int livre = 0;

    public void adiciona(Funcionario x){
        this.funcionarios[this.livre] = x;
        this.livre++;
    }

    public void mostraEmpregados(){
        for (int i = 0; i < this.funcionarios.length; i++) {
            if(this.funcionarios[i] != null){
                System.out.println("Funcionário na posição: " + i);
                System.out.println("Salário: " + this.funcionarios[i].getSalario());
                continue;
            }
        }
    }

    public void mostraTodasAsInformacoes(){
        for(int i = 0; i < this.livre; i++){
            if(this.funcionarios[i] == null){
                continue;  
            } 
            this.funcionarios[i].getFuncionario();
        }
    }

    boolean contem(Funcionario f){
        for(int i = 0; i < this.livre; i++){
            if(this.funcionarios[i] == f){
                return true;
            }
        }
        return false;
    }
}

class TestaEmpresa {

    public static void main (String[] args) {
        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.setSalario(1000);
        f1.dataDeEntrada = new Data();
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.setSalario(1700);
        f2.dataDeEntrada = new Data();
        empresa.adiciona(f2);

        System.out.println(empresa.contem(f2));
    }
}

Alguém sabe o porque do erro ocorrer? Pois não estou chamando diretamente a variável saldo fora da classe Funcionario.

Obrigado desde já.

4 respostas

Oi Aron, tudo bom?

Segundo o erro:

Exception in thread "main" java.lang.IllegalAccessError: tried to access field Funcionario.salario from class TestaFuncionario at TestaFuncionario.main(TestaFuncionario.java:71)

Na classe TestaFuncionario na linha 71 a gente ta tentando acessar o atributo salario diretamente. Compartilha com a gente a classe, assim a gente pode discutir melhor =)

De qualquer forma, tenta trocar o acesso direto ao atributo por um get ou um set.

Abraço!

Bom dia André,

O código é esse que compartilhei, segundo o erro o problema estaria nessa linha:

System.out.println("Funcionário na posição: " + i);

Porém nela não estou acessando saldo. Na linha abaixo dela eu até acesso, porém através de um getter:

System.out.println("Salário: " + this.funcionarios[i].getSalario());

Onde minha getSalario da classe Funcionario está da seguinte forma:

public double getSalario(){
        return this.salario;
    }

Não estou entendendo o porque do compilador interpretar que estou tentando acessar diretamente o salario :/

solução!

Opa, repara que o erro diz:

TestaFuncionario.java

A classe que você compartilhou aqui é a:

TestaEmpresa.java

Verifica a classe TestaFuncionario

Nossa, verdade André, eu estava tentando executar o TestaFuncionário e vendo o código da TestaEmpresa. Agora está tudo certo. Muito obrigado e desculpa a desatenção :D