Geschützte geschachtelte Klasse, auf die abgeleitete Klassen in anderen Paketen nicht zugreifen können

8

Hier ist, was ich zu erreichen versuche

Datei 1: ./net/Class1.java

%Vor%

Datei 2: ./com/Class2.java

%Vor%

Hier ist der Fehler, den ich bekomme

%Vor%

Wird dieser Fehler erwartet? Mache ich etwas falsch?

    
rubixibuc 23.07.2012, 01:18
quelle

1 Antwort

9

Wenige wichtige Fakten (die viele vergessen oder nicht wissen):

  1. Standard -Konstruktoren (einschließlich solche für statische und nicht statische verschachtelte Klassen) haben dieselbe Sichtbarkeit wie die Sichtbarkeit der Klasse, zu der sie gehören . Also im Fall von protected class Nested{...} ist sein Standardkonstruktor auch protected .
  2. Element mit protected Sichtbarkeit kann nur von der Klasse zugegriffen werden, die
    • gehört zu demselben Paket wie die Klasse, die dieses Element deklariert hat,
    • erweitert (explizit oder implizit) die Klasse, die es deklariert hat.

Ihr Class2 extends Class1 hat also nur Zugriff auf Mitglieder von Class1 (einschließlich Zugriff auf Nested type). Aber seit es

  • erweitert Nested nicht (sogar implizit erbt es nur den Zugriff darauf, da es protected ist)
  • gehört nicht zum selben Paket wie Nested

kann nicht auf protected elements von Nested class (einschließlich Konstruktoren) zugreifen.

Um dieses Problem zu lösen, machen Sie Nested constructor public .

%Vor%     
Pshemo 23.07.2012, 01:33
quelle

Tags und Links