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á.