Frage

    

Diese Frage bereits eine Antwort hier:

         

Was ist der Unterschied in der Zugänglichkeit der folgenden Variablen in Java?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

Ich bin am meisten interessiert, was die letzte tut.

War es hilfreich?

Lösung

  • public: Schreib- / Lesezugriff für alle
  • geschützt: Schreib- / Lesezugriff für Instanzen von Subklassen und von innerhalb der Umverpackung
  • private: Schreib- / Lesezugriff für jeder Instanz der Klasse und innere oder äußere (einschließe) -Instanz
  • int c: Paket-private, Schreib- / Lesezugriff für alle Klassen innerhalb desselben Pakets

Siehe JLS weitere Details

EDIT: Kommentar hinzugefügt für geschützt, dass der Zugang unter Angabe von innen gleichem Paket gewährt wird, sie bist völlig richtig. Auch Kommentar für private hinzugefügt. Ich erinnere mich jetzt ...; -)

Andere Tipps

Es tut uns Korrekturen an eine vorherige Antwort zu beantworten, aber ich habe nicht genug Ruf direkt zu ändern ...

  • public - Schreib- / Lesezugriff für alle
  • geschützt - Schreib- / Lesezugriff für Instanzen Unterklassen und alle Klassen innerhalb derselben Verpackung
  • int c: package-private, Schreib- / Lesezugriff für alle Klassen im Innern gleiches Paket
  • privat - Schreib- / Lesezugriff für jedes Mitglied dieser Klasse selbst und innerer Klassen (falls vorhanden)

Es ist besser, die Zugriffsmodifikatoren diese Weise aus dem breitesten Zugang (öffentlich) an der schmalsten (privat), um zu bestellen, zu wissen, dass, wenn sie von schmal bis breit gehen, müssen Sie alle Möglichkeiten, nicht verlieren.

Das ist besonders wichtig für „geschützt“, wo es oft falsch verstanden wird, dass Klassen im gleichen Paket können auch Zugriff auf geschützte Elemente einer Klasse (nicht nur ihre Unterklassen).

Ich versuche, Paketebene Zugriff vollständig (den letzten Zugriff Sie erwähnen).

zu vermeiden

Ich mag Klassen halten eigenständig. Wenn eine andere Klasse Zugang zu etwas in meiner Klasse benötigt, sollte es öffentlich sein (und es sollte durch ein Verfahren, kein Attribut). Ansonsten fühle ich mich Sie gebrochene Kapselung haben , wie in Abstraktion VS Information Hiding VS Encapsulation erklärt.

Und alle diese sind Kompilierung Umzäunungen, können sie leicht durch Reflexion zur Laufzeit außer Kraft gesetzt werden.

scroll top