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

Modificadores de Acesso - Exercício 04

Olá, pessoal.

Sou novo no curso e novo em Java, desculpem se eu colocar alguma bobagem rs. Fiquei com dúvidas no "Exercício 04" do "Módulo Modificadores de Acesso":

Classe Empresa:

package exercicios;

public class Empresa {

            private String cnpj;

            private Funcionario[] empregados;

            public Empresa(String cnpj) {
                this.cnpj = cnpj;
                this.empregados = new Funcionario[10];
            }

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

}

Classe Funcionário

package exercicios;

class Funcionario {
  private String nome;
  String cpf;
  private double salario;

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

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

}

Classe TestaFuncionario

package exercicios;

class TestaFuncionario {

  public static void main(String [] args) {

    Funcionario func = new Funcionario();
    func.setNome("Diego");
    System.out.println(func.getNome());

    Empresa emp = new Empresa();
    emp.cnpj("123456789");
    emp.getCnpj();

  }
}

No Exercício 04 consta: A resposta desse Exercício é:

public class Empresa {
            private Funcionario[] empregados;
            private String cnpj;
            private int livre = 0;

            public Empresa(String cnpj) {
                this.cnpj = cnpj;
                this.empregados = new Funcionario[10];
            }

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

            // outros métodos, quase todos public
            // note que o aumentaArray, se escrito deve ser private
        }

As minhas dúvidas são:

A) Como chamar esse "método Empresa" na Classe TestaFuncionario?

B) Por que esse método não tem um nome? Ou pelo menos eu não enxerguei... O que eu vi foi que ele é público, do tipo "Empresa" e recebe um parâmetro String que é o CNPJ. Cadê o nome padrão "public Empresa setCNPJ"?

Valeu, desde já agradeço a todos!

5 respostas
solução!

Amigo nesse caso, quando vc cria um objeto empresa, você já deve informar o cnpj e após isto não pode altrar o cnpj. Você esta já atribuindo valores no construtor da classe, vc pode usar o setCnpj(), mas tudo depende da sua necessidade.

Respondendo suas questões: A - No momento da criação dos seus objetos. Ex: Empresa fiat = new Empresa("Aqui o CNPJ");

B - O nome do metodo é EMPRESA(Valores), isto é, o construtor da classe.

Olá, Lucas. Muito obrigado, agora rodou perfeito! Valeu mesmo! Só mais uma dúvida: Minha classe TestaFuncionario agora ficou assim:

package exercicios;

class TestaFuncionario {

  public static void main(String [] args) {

    Funcionario func = new Funcionario();
    func.setNome("Diego");
    System.out.println(func.getNome());

    Empresa emp = new Empresa("123456789");
    emp.getCnpj();
    System.out.println(emp.getCnpj());
  }
}

Essa linha faz sentido?

Empresa emp = new Empresa("123456789");

Eu fiz assim em função do exercício (pois acho que tava pedindo isso), mas não consigo enxergar um sentido nisso. Bem como você falou, somente poderá passar 01 CNPJ ao criar o Objeto. Tem sentido isso?!

Está Certo, pois na linha:

Empresa emp = new Empresa("123456789");

Você está criando o objeto e atribuindo a ele o valor do CNPJ, porém mudaria apenas as demais linhas, ficando desta forma:

Empresa emp = new Empresa("123456789"); System.out.println(emp.getCnpj()); -> Aqui já entra na função getCnpj() e já exibe o seu resultado na tela, sem a necessidade de chamar a função antes.

Certo Diego. Agora sim!!

Sim faz sentido, imagine que seja obrigatório algum campo do seu objeto, então se você pode colocar no construtor da classe, assim você obriga no momento da criação do objeto que esta informação seja instanciada.

Vou dar um exemplo pratico disso, imagine uma classe cliente, e você coloque alguns atributos como obrigatórios ao criar o objeto .

class Cliente { // Outros atributos da classe Cliente public string Nome { get; set; }

public Cliente (string nome) { this.Nome = nome; } }

No nosso exemplo o nome do cliente como obrigatorio, ou seja, sempre que você criar um novo cliente você deve no minimo informar o nome do cliente.

Mas nada impede de vc ter varios contrutores dentro do seu codigo, podem ser de diferentes maneiras.

class Cliente { // Outros atributos da classe Cliente private string Nome { get; set; } private string rg { get; set; }

public Cliente (string nome) { this.Nome = nome; }

public Cliente (string rg) { this.rg = rg; }

public Cliente (string nome, String rg) { this.Nome = nome; this.rg = rg; }

}

Valeu Lucas, valeu Rafael. Bem esclarecedor!! Obrigado!!