Le importazioni "jolly" in Java funzionano solo al livello immediato in cui vengono implementate le classi.
Cioè, se si dispone di classi A
, B
e C
, con nomi completi:
com.foo.bar.A
;
com.foo.bar.B
;
com.foo.C
;
quindi importando com.foo.bar.*
consentirà l'accesso a A
e B
senza ulteriori; ma C
NON sarà disponibile.
Analogamente, importando com.foo.*
comprenderanno facilmente avere C
disponibile, ma non A
e B
.
Ora:
ho pensato che se hai inserito una classe, come negli ultimi due esempio, che è stato importato in modo efficace quella classe e ha ereditato tutte le sue sottoclassi.
Non funziona. Anche se B
"eredita" A
, se si sceglie di utilizzare l'importazione completa com.foo.bar.A
, NON verrà importata automaticamente com.foo.bar.B
. Dovrai importare B
separatamente. Il che ha senso: nulla impone l'implementazione di un'interfaccia o di una classe astratta nello stesso pacchetto della loro interfaccia di base/classe di base, per esempio; e nello stesso progetto, potresti avere due classi chiamate B
, in diversi pacchetti: cosa dovrebbe fare il compilatore?
Ora, in base alle convenzioni di stile di codifica, che si compensano o si devono rispettare nel proprio ambiente di lavoro, tali importazioni di caratteri jolly possono essere semplicemente e semplicemente vietate e sarà necessario importare A
e B
separatamente. Per quanto riguarda le importazioni statiche, hanno altri problemi ...
Infine, si noti che, per impostazione predefinita, è possibile utilizzare tutto java.lang.*
senza dover dichiarare un'importazione.
L'uso di 'import java.awt. *' Importerà solo le classi nel pacchetto 'java.awt' (se presente). Nota che il carattere jolly '*' non è ricorsivo per pacchetti. –
I tuoi ultimi due esempi non "includono classi", essi * importano pacchetti. * – EJP