Acessando método PRIVATE, como?

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

Provavelmente seu .class ainda esta com a versão antiga. eu fiz aqui e não funcionou não.

Att,

Ricardo Cabral

eu apaguei o Funcionario.class, compilei javac Funcionario.java, testei e não funfou.

mas quando mudo o nome do método, ai dá erro, NoSuchMethod, será que o nível de acesso, só é garantido na compilação?

Sim, pois o que a jvm le é o .class, logo ele só vai entender que o método é private se estiver compilado como tal :wink:

Ricardo Cabral

[quote=Cabral]Sim, pois o que a jvm le é o .class, logo ele só vai entender que o método é private se estiver compilado como tal :wink:

Ricardo Cabral[/quote]

Eu tinha postado errado, leia novamente meu último post, eu editei!!!

"testei e não funfou. "

ninguém? novidades?

Eu não entendi direito o problema, vc compilou seu Funcionario.class e não funcionou certo? Se for, é isso mesmo, não é pra funcionar mesmo…

flw

Eu estava querendo exatamente saber como eu poderia acessar uma função private.

package polimorfismo;

public class Pai
{
void Polimorfismo()
{
System.out.println(“Chama função PAI”);
}
}

class Filho extends Pai
{
protected void Polimorfismo()
{
System.out.println(“Chama função FILHO”);
}
}

class Neto extends Filho
{
public void Polimorfismo()
{
System.out.println(“Chama função NETO”);
}
}

class Main
{
public static void main(String[] args)
{
Pai pai = new Filho();
pai.Polimorfismo();
}
}

Assim da certo…logicamente…rsrs…porém, se eu fizer:

package polimorfismo;

public class Pai
{
private void Polimorfismo()
{
System.out.println(“Chama função PAI”);
}
}

class Filho extends Pai
{
protected void Polimorfismo()
{
System.out.println(“Chama função FILHO”);
}
}

class Neto extends Filho
{
public void Polimorfismo()
{
System.out.println(“Chama função NETO”);
}
}

class Main
{
public static void main(String[] args)
{
Pai pai = new Filho();
pai.Polimorfismo();
}
}

A primeira fica inacessível à main ( Função Polimorfismo em Pai invisivél). Tem algum jeito? É só curiosidade mesmo.