Dúvida - preciso de ajuda

7 respostas
G

Olá pessoal,

Estou com uma dúvida aqui nos modificadores de acesso. No código abaixo eu achava que a variável str (por ser private), não seria acessível no main a partir de uma instância. E também achava que não seria acessível utilizando uma instância em qualquer parte do código…alguém ai me explica? Me confundi…

package PracticeExam4;

public class E6{

	private String str;

	public E6(String s){
		str = s;
	}

	public boolean equals(E6 obj){
		if(!(obj instanceof E6))
			return false;
		E6 e = (E6) obj;
		return (str == e.str || (str != null && str.equals(e.str)));

	}	

	public static void main(String[] args){
		E6 e1 = new E6("java");
		E6 e2 = new E6("Java");
		System.out.println(e1.equals(e2));
		System.out.println(e1.str);
	}

}

[]s
Gunnar

7 Respostas

P

Opa,

um atributo ser definido como PRIVATE indica q ele será visto somente pela classe q a definiu…

neste caso ele estará visivel a qq parte da classe…

as propriedade geralemnte sao marcadas como private como forma de manter o encapsulamento das propriedades do objeto…

G

pardal_nb:
Opa,

um atributo ser definido como PRIVATE indica q ele será visto somente pela classe q a definiu…

neste caso ele estará visivel a qq parte da classe…

as propriedade geralemnte sao marcadas como private como forma de manter o encapsulamento das propriedades do objeto…

blz

Mas o que eu estou questionando é acessar o atributo privado criando uma nova instância

E6 e = new E6(Java);

e depois acessar o membro private assim: System.out.println(e.str);

Isso que pra mim não era possível
P

Mas o que eu estou questionando é acessar o atributo privado criando uma nova instância
E6 e = new E6(“Java”);

Vc nao esta criando uma instancia com o atributo privado…vc esta apenas criando um objeto passando para um parametro para o construtor…o contrutor q, no seu caso, está setando o valor da sua propriedade

Como vc esta acessando de dentro da classe nao há nenhum problema em acessar a propriedade direto dessa forma, mas o aconselhavel eh usar um metodo getProperty para fazer isso

G

pardal_nb:
Mas o que eu estou questionando é acessar o atributo privado criando uma nova instância
E6 e = new E6(“Java”);

Vc nao esta criando uma instancia com o atributo privado…vc esta apenas criando um objeto passando para um parametro para o construtor…o contrutor q, no seu caso, está setando o valor da sua propriedade

Como vc esta acessando de dentro da classe nao há nenhum problema em acessar a propriedade direto dessa forma, mas o aconselhavel eh usar um metodo getProperty para fazer isso

Acho que você não entendeu…

System.out.println([color=red]e.str[/color]);

[]s
Gunnar

Link_pg

Olá!

private te da acesso apenas na própria classe… quando você faz:

apesar de estar num método diferente e usando uma instância ainda está na mesma classe :smiley:

Abraços

Veronicaaa

Oi

Isso é um atributo de instância, ou seja, pode ser acessado criando uma nova instância para a classe, como tem o modificador private isso significa que só pode ser acessado pela própria classe.

E6 e1 = new E6("java");   
        E6 e2 = new E6("Java");   
        System.out.println(e1.equals(e2));   
        System.out.println(e1.str);

Aqui você criou duas instâncias de E6 (e1 e2) e acessou o atributo privado str porque as instâncias de E6 podem acessar seus membros privados, mesmo que você esteja tentando acessá-los dentro de outro método.

G

Veronicaaa:
Oi

Isso é um atributo de instância, ou seja, pode ser acessado criando uma nova instância para a classe, como tem o modificador private isso significa que só pode ser acessado pela própria classe.

E6 e1 = new E6("java");   
        E6 e2 = new E6("Java");   
        System.out.println(e1.equals(e2));   
        System.out.println(e1.str);

Aqui você criou duas instâncias de E6 (e1 e2) e acessou o atributo privado str porque as instâncias de E6 podem acessar seus membros privados, mesmo que você esteja tentando acessá-los dentro de outro método.

Eu só posso acessar o atributo privado pela instância porque estou dentro da mesma classe. Se fosse outra classe não funcionaria.
Eu tinha feito confusão com o private porque eu estava achando que o código dentro do main era como se fosse pertencente a outra classe… :oops:
Obrigado a todos pela ajuda :smiley:

[]s
Gunnar

Criado 3 de dezembro de 2007
Ultima resposta 4 de dez. de 2007
Respostas 7
Participantes 4