Acessando método PRIVATE, como?

10 respostas
P

Classe Principal

public class Principal {

  public static void main(String[] args) {
    Funcionario f = new Funcionario();
    f.setCodigo(5);
    System.out.println("Codigo: " + f.getCodigo());
  }
}

Classe Funcionario

public class Funcionario {
  private int codigo;

  public void setCodigo(int codigo) {
	  this.codigo = codigo;
  }

  public int getCodigo() {
	  return codigo;
  }
}
javac Principal.java
java Principal

OUT: Código 5

Alteração Funcionario (setter e getter como private)

public class Funcionario {
  private int codigo;

  private void setCodigo(int codigo) {
	  this.codigo = codigo;
  }

  private int getCodigo() {
	  return codigo;
  }
}
javac Funcionario.java
java Principal

OUT: Código 5

Como ele funcionou??? Não era para gerar erro de runtime? O nível de acesso só é bloqueado na compilação???

Abs,
Pablo

10 Respostas

L

Acho que essa segunda compilação ai num ta funcionando nao!!!
Da uma verificada, tenta deletar o .class, compila novamente e executa.

B

Ola

Com certeza vc tera que recompilar ambas as classes… pq isto ae dá erro de compilação…

P

Então, eu pensava exatamente igual as vcs quando um colega me comentou sobre o problema… Por favor, façam o teste e vejam!!! Já apaguei o .class e criei novamente, não funfa…

Dá idéia que o nivel de acesso só é garantido em tempo de compilação, façam um teste, pois se alterar o nome do metodo ai não funciona, mas se alterar para private funciona.

B

“phstc”:
Então, eu pensava exatamente igual as vcs quando um colega me comentou sobre o problema… Por favor, façam o teste e vejam!!! Já apaguei o .class e criei novamente, não funfa…

Dá idéia que o nivel de acesso só é garantido em tempo de compilação, façam um teste, pois se alterar o nome do metodo ai não funciona, mas se alterar para private funciona.

Ola

Pablo, a JVM carrega as classes dimanicamente… isto é, dentro da compilação de uma classe ela só tem referencias a outra classe, quando esta é requerida ela é carregada, então quando ela fizer a carga da classe Funcionário, ela irá perceber que o serialVersion é diferente… e bum… para por ae…

Com certeza deve estar ocorrendo alguma coisa estranha no seu teste…

P

Vc fez o teste?

B

hummmm,… muito estranho… funfou mesmo… vou ver se acho algum bug referente a isto no bugdatabase…

P

se tiver uma novidade, posta ai!

B

Ok

P

ninguém? novidades?

B

PÕ… inda não tive tempo de ver isto não… mas tá na fila aqui. :slight_smile:

Criado 6 de setembro de 2006
Ultima resposta 13 de set. de 2006
Respostas 10
Participantes 3