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

Problema ao compilar. erro de acesso a classe Empresa e não encontra nem carrega classe principal

Ao criar uma referencia do Atributo empregado da Classe empresa e tentar compilar aparece a seguinte mensagem: empregados has private acess in Empresa. Testei duas coisas: 1º tirei o modificado de acesso Private do atributo empregados. 2º criei a referencia direto na classe;

porém ao compilar retornou a mensagem: não foi possivel localizar nem carregar a classe principal TestaFuncionario.class

tadas as classe estão em um mesmo arquivo .java

segue codigo

class Funcionario{

        private String nome;
    private String departamento;
    private double salario;
    private Data dataEntrada;
    private String rg;


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

    public String getNome() {
        return this.nome;
    }

    public void setNome (String nome) {
        this.nome = nome;
    }

    public String getDepartamento() {
        return this.departamento;
    }

    public void setDepartamento (String departamento) {
        this.departamento = departamento;
    }

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

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

    public Data getDataEntrada() {
        return this.dataEntrada;
    }

    public void setDataEntrada (Data dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

    public String getRg() {
        return this.rg;
    }

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

    public void setRg(String valorRg){
        this.rg = valorRg;
    }


        public void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salário: " + this.salario);
        System.out.println("Data de Adminssão: " + this.dataEntrada.getFormatada());
        System.out.println("RG: " + this.rg);
    }


}




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

    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{

    private Funcionario[] empregados;
    private String nome;
    private String cnpj;
    private int livre = 0;

    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCnpj() {
        return this.cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

/////////////////////////////////////////////////////////////

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


    void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("R$" + this.empregados[i].salario);
            }
    }

    public Funcionario getFuncionario(int posicao) {
        return this.empregados[posicao];
    }

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

   public void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            this.empregados[i].mostra();
        }
    }

}

class TestaFuncionario{

    public static void main(String[] args) {

         Empresa empresa = new Empresa();
         empresa.empregados = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.setSalario(1000);

        Data data = new Data();
        data.preencheData(3,4,1988);  
        f1.setDataEntrada(data);

        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.setSalario(1700);

        data.preencheData(3,4,1989);  
        f2.setDataEntrada(data);


        empresa.adiciona(f2);

        empresa.mostraTodasAsInformacoes();

    }
}
4 respostas
solução!

Antonio,

o certo seria utilizar apenas os métodos get e set para fazer o acesso aos atributos, assim mantendo o encapsulamento.

quando compilei o seu código encontrei dois problemas:

Problema 1

java1.java:123: error: salario has private access in Funcionario
            System.out.println("R$" + this.empregados[i].salario);

Solução 1 : utilizar o método .getSalario();

void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("R$" + this.empregados[i].getSalario());
            }
    }

Problema 2

java1.java:154: error: empregados has private access in Empresa
         empresa.empregados = new Funcionario[10];
                ^

Solução 2 : foi criado um método setEmpresas em empresa, e utilizada na classe testa

class Empresa{

    private Funcionario[] empregados;
    private String nome;
    private String cnpj;
    private int livre = 0;

    public String getNome() {
        return this.nome;
    }


    public void setEmpregados(Funcionario[] empregados){
        this.empregados = empregados;
    }

   // resto do código
}

class TestaFuncionario{

    public static void main(String[] args) {

         Empresa empresa = new Empresa();
         empresa.setEmpregados(new Funcionario[10]);

       // resto do código
    }
}

bons estudos

Fiz as modificações que indiciou, aparentemente compliou sem erros. pore ao executar o comando java TestaFuncionario.class aparece a mensagem:

Não foi possivel localizar nem carregar a classe principal TestaFuncionario.class.

o que pode ser?

Olá Antonio, tudo bem? Tente colocar a classe principal, ou seja, a classe TestaFuncionario como publica:

public class TestaFuncionario{
///resto da classe omitido

Tente também verificar se o arquivo .class se encontra no mesmo diretorio que o arquivo .java e se é o mesmo diretório em que você está tentando executar o programa.

Além disso veja se o nome da classe é o mesmo nome do arquivo java que voce está compilando.

1 - javac TestaFuncionario.java --> TestaFuncionario.class

2 - java TestaFuncionario

Deletei o aqruivo TestaFuncionario.class, recompilei e deu certo.

Obrigado a todos