In Java stehen vier Zugriffsmodifikatoren für Methoden zur Verfügung:
public
- Jede Klasse kann diese Methode verwenden.
protected
- Klassen in demselben Paket und Unterklassen in jedem Paket können diese Methode verwenden.
private
- Nur diese Klasse kann diese Methode verwenden.
no modifier
("package private") - Nur Klassen im selben Paket können diese Methode verwenden.
Was häufig vorkommt, ist, dass ich nützliche Methoden in einer Oberklasse haben möchte, die alle Unterklassen verwenden können. Es wäre jedoch für andere Klassen nicht sinnvoll, auf diese Methode zuzugreifen, und in gewissem Sinne würde die Kapselung unterbrochen.
Also muss ich diese nützlichen Methoden in der Superklasse public
oder deklarieren protected
, die sie allen anderen Klassen zumindest im Paket zur Verfügung stellt. Obwohl sie nur für die Unterklassen bestimmt sind.
Gibt es einen Grund, warum es subclasses-only
in Java keinen Zugriffsmodifikator gibt ? Es kommt mir sehr merkwürdig vor. Vermisse ich etwas?
Ein subclasses-only
Zugriffsmodifikator ist auch nützlich, wenn Sie Variablen nur für Unterklassen verfügbar machen möchten. Was mir oft passiert.
quelle
Java hatte ursprünglich einen solchen Modifikator. Es wurde geschrieben,
private protected
aber in Java 1.0 entfernt.Ich nehme an, das war ein Urteil, dass die zusätzliche Komplexität die Kosten nicht wert war.
Jedes Sprachmerkmal hat seine Kosten: es neuen Programmierern beizubringen; in der Dokumentation; bei der Implementierung in den Compiler-, JVM- und Dev-Tools; in Überlegungen zur Programmkorrektheit; bei der Einschränkung der zukünftigen Sprachentwicklung; und mehr. Sprachmerkmale interagieren miteinander, möglicherweise mit N 2 -Interaktionen.
Wie viel Prozent der Java-Programmierer haben die Java-Sprachspezifikation und die VM-Spezifikation gelesen? Ich wette, es ist ein kleiner Prozentsatz, der aus Gründen der Verständlichkeit und der technischen Produkte, auf die wir uns verlassen können, für eine noch einfachere Sprache plädiert
Der Vorteil der
private protected
Funktion war gering, da das Paket die Haupteinheit der Modularität ist.quelle
Die Zugriffskontrolle ist das Ergebnis einer Diskussion mit einem imaginären Entwickler, der mit Ihrer Klasse über die Klassenmethoden und -eigenschaften arbeitet.
Dies ist öffentlich ...
Das ist privat...
Dies ist geschützt ...
Das ist Paket.
Dies ist privat geschützt ...
quelle
Das gibt es schon. Es ist geschützt.
Sie haben die Kontrolle darüber, welche Klassen im Paket vorhanden sind. Wenn das Paket keine andere Klasse enthält und eine bestimmte Variable oder Methode geschützt ist, handelt es sich um "nur Unterklassen".
Sie haben abermals die Kontrolle darüber, welche Klassen im Paket vorhanden sind. Sie können festlegen, dass die geschützten Methoden oder Variablen nicht verwendet werden.
quelle