2012-02-26 17 views
12

In Java, dire che ho la seguente classe:classe interna che si estende

public class A{ 
    protected class B{ 
    } 
} 

posso estendere la classe interna nel modo seguente?

public class C extends A{ 
    protected class D extends B{ 
    } 
} 

Quello che voglio fare è che ho la classe C al di sopra e ho bisogno di cambiare qualcosa nella classe interna di A in modo pensavo che ho bisogno di estendere la classe interna di farlo ma non ero certo come esattamente farlo.

+2

Hai provato a compilare? –

+0

Sì, puoi estendere la classe interiore in questo modo. – Headshota

+1

Compila .... – eboix

risposta

7

In base allo this page, è stato individuato il modo corretto per estendere le classi interne. Alcuni suggerimenti su di esso possono essere trovati here, nel mezzo dell'articolo (cercare "estendere").

1

Se questo non funziona (non credo che lo farà), il seguente dovrebbe:

public class C extends A{ 
    protected class D extends A.B{ 
    } 
} 

Beh, si, ma cosa succede se si dispone di un'altra classe di nome B al di fuori di A?

Modifica: no, non fa differenza. Anche se esiste un'altra classe denominata B, verrà comunque utilizzato lo A.B. Quindi la tua sintassi è corretta.

+0

La soluzione dell'utente1082160 funziona. Sono stato anche sorpreso. – eboix

+1

Non funzionerebbe se 'D' era' statico', ma non lo è, quindi lo fa. – Jeffrey

1

È possibile farlo ma non aspettarsi che la classe C usi la classe D al posto della classe B interna di A automaticamente.

+0

Questo è l'aspetto veramente cruciale con l'ereditarietà delle strutture di dati di classe esterna/interna. C'è qualche schema conosciuto per affrontare questo problema (generici, ecc.)? – sema

+0

Direi di iniettare l'istanza attuale di B (B o D in questo caso) che si desidera utilizzare. – stryba

Problemi correlati