14 Stimmen

Warum können Subpakete keine paketprivaten Klassen sehen?

Also gut, ich habe diese Projektstruktur:

Paket A.B

  • Klasse SuperClass (diese Klasse ist als paketprivat markiert)

Paket A.B.C

  • Klasse SubClass (erbt von Superklasse)

Ich würde SuperClass lieber nicht öffentlich sichtbar machen... Es ist wirklich nur eine Hilfsklasse für dieses spezifische Projekt (A.B).

Es scheint mir, dass SubClass SuperClass sehen können sollte, da Paket A.B.C ein Unterpaket von A.B ist... aber das ist nicht der Fall.

Was wäre der beste Weg, dieses Problem zu lösen? Ich denke, es macht keinen Sinn, alles in A.B.C nach A.B hochzuverschieben oder A.B nach A.B.C herunterzuverschieben... hauptsächlich, weil es wahrscheinlich ein A.B.D geben wird, das auch von Sachen in A.B erbt...

Ich bin noch relativ neu in Java, also seid nett :D (Ich bin eher ein C++ und .NET Typ)

12voto

bragboy Punkte 33596

Pakete sind eindeutige Bezeichner. Du kannst sie nicht dazu bringen, den Vererbungsregeln zu folgen. Pakete und Unterpakete sind nicht analog zu Super- und Unterklassen.

Ich sehe keine Fehler darin, die Klasse, die du im Unterpaket verwenden wolltest, für die externe Welt sichtbar zu machen. Ich wäre daran interessiert zu wissen, wie dieses Kriterium in C++/.net gehandhabt wird (da ich ein Java-Typ bin :) )

8voto

BalusC Punkte 1034465

Ihr bester Einsatz besteht darin, den (Standard-)Konstruktor der Superklasse als geschützt zu deklarieren. Auf diese Weise können nur Klassen im selben Paket und Unterklassen unabhängig vom Paket Instanzen davon erstellen und von ihr erben.

0voto

Marshall Alsup Punkte 233

Warum legen Sie sie nicht auf derselben Paketebene ab?

Könnten Sie irgendwie die Komposition anstelle der Vererbung verwenden? Ich versuche, mehr davon selbst zu machen, nachdem ich Effective Java gelesen habe. Ich bin mir nicht sicher, ob dies angesichts Ihrer Anforderungen möglich ist, aber es könnte sich lohnen zu überlegen.

Viel Glück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X