2010-03-21 6 views
7

Va bene così, ho questa struttura di progetto:Perché i pacchetti secondari non possono vedere le classi private del pacchetto?

pacchetto AB

  • classe SuperClass (questa classe è contrassegnata pacchetto privati)

pacchetto ABC

  • classe SubClass (eredita dalla super classe)

Preferisco non rendere visibile il numero SuperClass ... È davvero solo una classe di utilità per questo specifico progetto (A.B).

Mi sembra che SubClass dovrebbe essere in grado di vedere SuperClass, perché il pacchetto A.B.C è un sotto pacchetto di A.B ... ma questo non è il caso.

Quale sarebbe il modo migliore per risolvere questo problema? Non penso che abbia senso spostare tutto in ABC fino ad AB o spostare AB in ABC .. principalmente perché probabilmente ci sarà un ABD che eredita da roba in AB ...

Sono un po 'nuovo per Java, quindi sii gentile: D (Sono un ragazzo C++ e .NET)

risposta

9

I pacchetti sono identificatori univoci. Non puoi farli seguire le regole di ereditarietà. Package e SubPackages non sono analogici alle classi Super e Sub.

Non vedo alcun difetto nel rendere visibile la classe che si desidera utilizzare nel pacchetto secondario al mondo esterno. Sarei interessato a sapere come tale criterio viene gestito in C++ /. Netto (come io sono un ragazzo java :))

+0

Sì, ho immaginato che stavo solo fraintendendo i pacchetti – Polaris878

+2

in .NET. Avrei solo messo le classi in cartelle e averle contrassegnate come interne :) – Polaris878

+0

@ Polaris878: Nice. – bragboy

6

La cosa migliore è quella di dichiarare il costruttore (default) (s) di SuperClass come protected. In questo modo solo le classi nello stesso pacchetto e sottoclassi a prescindere dal pacchetto possono istanziarlo ed estenderlo.

-1

Perché non metterli nello stesso livello di pacchetto?

Potrebbe in qualche modo utilizzare la composizione anziché l'ereditarietà? Ho provato a fare di più da solo dopo aver letto Effective Java. Non sono sicuro se questo è possibile date le tue esigenze, ma potrebbe valerne la pena.

Buona fortuna.

+1

Non li voglio nello stesso livello di pacchetto perché avrò circa 20-30 classi che si affideranno alla super classe, e sto cercando di mantenere le cose organizzate lol. – Polaris878