Betrachten Sie das folgende Snippet:Warum verwenden Sie Zugriffs-Spezifizierer beim Definieren von inneren (nicht-statischen geschachtelten) Klassen in Java?
class Deep {
static class StaticInner {
}
class InnerClass {
}
public class InnerClass2 {
}
private class InnerClass3 {
}
protected class InnerClass4 {
}
}
public class Test {
public static void main(String args[]) {
Deep.StaticInner sc = new Deep.StaticInner(); // valid
Deep.InnerClass ic = new Deep.InnerClass(); // invalid
Deep.InnerClass2 ic2 = new Deep.InnerClass2(); // invlaid
Deep.InnerClass3 ic3 = new Deep.InnerClass3(); // invalid
Deep.InnerClass4 ic4 = new Deep.InnerClass4(); // invalid
}
}
Mit Ausnahme der statischen Klasse in Tief namens StaticInner
, alle anderen verschachtelten Klassen erfordern die umgebenden Klasse Deep
, zugegriffen werden kann. Mit anderen Worten, sie können nicht außerhalb von Deep
zugegriffen werden (das ist mein Verständnis). Ich habe Programmierer gesehen, die Spezifizierer vor verschachtelten inneren Klassen spezifizieren. Was ist der Punkt? Wenn (nicht statische) innere Klassen überhaupt nicht außerhalb der einschließenden Klasse zugänglich sind, warum werden Spezifizierer (public
, private
, & protected
) angegeben? Warum unterstützt Java sogar Zugriffsspezifizierer für innere Klassen?
Es geht darum, den Zugriff und die Belichtung zu beschränken. Zum Beispiel ist 'private class InnerClass3' nicht zugänglich, selbst wenn Sie eine Deep-Instanz erstellen. – c0der
'Deep.InnerClass ic = neu Deep.InnerClass(); // ungültig, weil 'InnerClass' nicht statisch ist – emotionlessbananas