Acessando método PRIVATE, como?

7 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

7 Respostas

C

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

Att,

Ricardo Cabral

P

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?

C

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

P

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

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

"testei e não funfou. "

P

ninguém? novidades?

D

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

E

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.

Criado 6 de setembro de 2006
Ultima resposta 13 de jan. de 2008
Respostas 7
Participantes 4