Przywóz "wieloznaczny" w Javie działa tylko na najbliższym poziomie, na którym są zaimplementowane klasy.
Oznacza to, że jeśli masz zajęcia A
, B
i C
, w pełni kwalifikowanych nazw:
com.foo.bar.A
;
com.foo.bar.B
;
com.foo.C
;
następnie importowanie com.foo.bar.*
umożliwi dostęp do A
i B
bez dalszych ceregieli; ale C
NIE będzie dostępny.
W tym samym stylu importowanie com.foo.*
będzie łatwo dostępne pod numerem C
, ale nie pod numerem A
i B
.
Teraz:
Pomyślałem, że jeśli włączone klasę, podobnie jak w dwóch ostatnich przykład, że można skutecznie importowane tej klasy i odziedziczył wszystkie jego podklasy.
Nie dotyczy. Nawet jeśli B
"dziedziczy" A
, jeśli zdecydujesz się użyć w pełni kwalifikowanego importu com.foo.bar.A
, NIE BĘDZIE automatycznie importować com.foo.bar.B
. Musisz oddzielnie zaimportować B
. Co ma sens: nic nie zmusza implementacji interfejsu lub klasy abstrakcyjnej do tego samego pakietu, co ich interfejs bazowy/klasa bazowa, dla jednego; i w tym samym projekcie, możesz mieć dwie klasy o nazwie B
, w różnych pakietach: co powinien zrobić kompilator?
Teraz, zgodnie z konwencjami stylu kodowania, które albo samemu sobie nadrabiamy, albo muszą być przestrzegane w środowisku pracy, takie importowanie symboli wieloznacznych może być czysto i zwyczajnie zabronione, a będziesz musiał oddzielnie zaimportować A
i B
. Jeśli chodzi o import statyczny, mają inne problemy ...
Należy pamiętać, że domyślnie można użyć wszystkich java.lang.*
bez konieczności zadeklarowania importu.
Użycie 'import java.awt. *' Spowoduje zaimportowanie tylko tych klas w pakiecie 'java.awt' (jeśli są dostępne). Zauważ, że '*' wieloznacznik nie jest rekursywny dla pakietów. –
Twoje dwie ostatnie próbki nie zawierają "klas", one * importują pakiety. * – EJP