So stieß ich auf ein Beispiel in einem Java-Buch, das ich gefunden:Ändern private Instanzvariablen in Java
public class Account {
private String name;
private double balance;
private int acctNumber;
public Account(){}
public boolean equals(Account anotherAcc) {
return (this.name.equals(anotherAcc.name)
&& (this.balance == anotherAcc.balance) && (this.acctNumber == anotherAcc.acctNumber));
}
}
Wir sehen, dass die Methode equals überlastet ist und mit einem anderen Konto-Objekt übergibt, wenn alle Instanz zu überprüfen Variablen sind gleich. Mein Problem mit diesem Code ist, dass es so aussieht, als ob wir direkt auf private Variablen im anotherAcc Objekt zugreifen, was nicht richtig erscheint, aber es funktioniert. Das gleiche passiert, wenn ich eine Hauptmethode in der gleichen Klasse mache, in der ich irgendwie Zugang zu den privaten Variablen bekomme.
Umgekehrt, wenn ich eine Hauptmethode in einer anderen Klasse erstellen, ist es nur dann bekomme ich einen Sichtbarkeitsfehler. Meine Frage ist, warum erlaubt Java den Zugriff auf private Instanzvariable in einem Objekt, das in einer Methode übergeben wird? Liegt es daran, dass das Objekt vom Typ Konto ist und die Methode, an die es übergeben wird, Teil einer Klasse ist, die als Konto bezeichnet wird?
Beachten Sie, dass der richtige Weg zum Überschreiben von 'equals' darin besteht,' public boolean equals (Object other) zu überschreiben ' – Philipp
Ich denke, Sie sollten den Link sehen, warum wir private Variablen in OOP benötigen http://programmers.stackexchange.com/ Fragen/143736/why-do-we-need-private-Variablen – Muhammad
Fügen Sie die Annotation @Override über Ihre equals-Methode und sehen, was passiert .. – Shmoopy