Frage

Also habe ich neulich eine Klasse erstellt und die Methode von Eclipse verwendet, um die Methode equal zu erstellen, als mir klar wurde, dass sie Folgendes generierte Arbeiten Code:

class Test {
  private int privateInt;
  [...]
  public boolean equals(Object obj) {
    [...]
    Test t = (Test) obj;
    if ( t.privateInt == privateInt ) {
    [...]
  }
}

t.privateInt..????Es soll privat sein!Ich vermute also, dass es neben privat, geschützt, paketgeschützt und öffentlich noch eine weitere Feldsichtbarkeit gibt.

Was passiert also hier?Wie heißt das? Wo würde jemand das verwenden? Bricht dies nicht die Kapselung?Was wäre, wenn die Klasse keinen Mutator hätte und ich diesen geändert hätte?Passiert das auch bei C++?Ist das eine OO-Redewendung?Wenn nicht, warum hat Java das dann getan?

Wo kann ich generell Informationen dazu finden?

Danke schön.

War es hilfreich?

Lösung

Es kann von verschiedenen Instanzen derselben Klasse aus darauf zugegriffen werden.

Entsprechend diese Seite (Fett von mir):

Auf der Mitgliedsebene können Sie wie bei Klassen der obersten Ebene und mit derselben Bedeutung auch den öffentlichen Modifikator oder keinen Modifikator (package-private) verwenden.Für Mitglieder gibt es zwei zusätzliche Zugriffsmodifikatoren:privat und geschützt. Der private Modifikator gibt an, dass auf das Mitglied nur in seiner eigenen Klasse zugegriffen werden kann.

Der Klarheit halber schreibe ich diese Zeile um:

if ( t.privateInt == this.privateInt )

Wir sind uns einig, dass „this.privateInt“ zulässig sein sollte:Sie greifen darauf über die Instanz der Klasse Test zu, an die die Nachricht „equals“ gesendet wurde.

Es ist weniger klar, dass „t.privateInt“ sichtbar sein sollte, da t eine separate Instanz der Klasse Test ist und wir nicht innerhalb ihrer Methode „equals“ ausführen.Java erlaubt dies jedoch, da beide Objekte (t und this) zur gleichen Klasse Test gehören und die privaten Mitglieder des jeweils anderen sehen können.

Andere Tipps

Mikes ganz richtig; Sie sind verwirrend Objekte (Instanzen einer Klasse) mit der Klasse selbst. Die Mitglieder sind privat die Klasse , keine bestimmte Instanz der Klasse.

Ich erinnere mich, wie überrascht darüber zu sein, wenn ich Java neu war.

Sie verweisen sie aus der gleichen Klasse. So wissen Sie, was Sie tun und braucht nicht von sich selbst geschützt werden.

Ein großer Grund, der zu den privaten Mitgliedern anderer Instanzen zugreifen dürfen ist „kopieren“ Funktionen zu ermöglichen - sie sonst ziemlich unmöglich sein. Auch wenn Sie nicht erlauben den Zugriff durch andere Instanzen, was würden Sie für statische Methoden erlauben?

Die privaten Variablen einer anderen Instanz derselben Klasse zugegriffen werden kann. Dies liegt daran, Sie bei der Umsetzung der Klasse zu tun hat, direkt, die Sie erfordert ohnehin über seine internen, ‚privaten‘ Variablen kennen.

Die einfache Antwort auf diese Verwirrung ist daran zu erinnern, dass der private Bereich sind nur sichtbar, und nur in der Klasse, wo sie initialisiert werden (und definiert) .... also, wenn Sie ein Objekt der Klasse innerhalb der Klasse zu machen, können Sie immer Zugriff auf den privaten Bereich dieser Klasse durch die Objektreferenz. Mai werden Sie seine schwer fühlen, aber man denke nur privaten Bereich wie einem öffentlichen Bereich ist, wenn Sie es innerhalb der Klasse verwenden, wo sie definiert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top