Anche se è l'istanza della stessa classe in cui è testPrivate scritto, ma non dovrebbe attraverso un errore di compilazione a System.out.println (o.count);
No. Non genererà mai un errore di compilazione.
Questo è molto simile a ciò che fa un getter e setter semplice o un costruttore di copie. Ricordate possiamo accedere private
membri utilizzando this.
public MyClass {
private String propertyOne;
private String propertyTwo;
// cannot access otherObject private members directly
// so we use getters
// But MyClass private members are accessible using this.
public MyClass(OtherClass otherObject) {
this.propertyOne = otherObject.getPropertyOne();
this.propertyTwo = otherObject.calculatePropertyTwo();
}
public void setPropertyOne(String propertyOne) {
this.propertyOne = propertyOne;
}
public String getPropertyOne() {
return this.propertyOne;
}
}
Il tuo metodo testPrivate
accetta un'istanza di MyClass. Poiché testPrivate
è un metodo all'interno di MyClass
, avrà accesso alle proprietà private
.
public void testPrivate(MyClass o) {
this.propertyOne = o.propertOne;
}
I metodi definiti all'interno della classe avranno sempre accesso alla sua private
membri, attraverso this.
e variabile di istanza.
Ma se si definisce testPrivate
al di fuori di MyClass
, non sarà possibile accedere ai membri private
.Lì dovrai usare un metodo o un setter o un getter.
Classe MyClass conosce la variabile count, quindi nessun problema – SaintLike
È privato della classe, non dell'istanza. Java non tenta di impedire alla mano sinistra di colpire la mano destra. ;) –
Generare tramite Eclipse o IDEA metodi hashCode e uguali, hanno sempre un aspetto così – Maksym