JavaRush /Java блог /Архив info.javarush /Работа компилятора с импортами
MariaM
24 уровень

Работа компилятора с импортами

Статья из группы Архив info.javarush
На Интуите написано много всего интересного хоть и неинтересным языком =) Импортирование пакетов и типов (классов и интерфейсов) пакетов создано для упрощения жизни. С импортированными пакетами доступ к переменным пакета может быть по простому имени. Можно и обойтись без импортов, но тогда каждый раз нужно будет писать полное имя переменной. Однако, при компиляции все имена приводятся к полным. И компилятор тут работает в следующей последовательности:
  • сначала просматриваются выражения, импортирующие типы;
  • затем другие типы, объявленные в текущем пакете, в том числе в текущем модуле компиляции;
  • наконец, просматриваются выражения, импортирующие пакеты.
Если у нас в пакете объявлен тип (класс): package my_geom; class Point { } а в другом модуле компиляции: package my_geom; import java.awt.Point; class Line { void main() { System.out.println(new Point()); } } то складывает неопределенная ситуация: какой Point создать и вывести: из пакета my_geom или импортированный java.awt.Point. И вот тут нужно руководствоваться приведенной выше очередностью. Т.к. мы импортировали тип java.awt.Point, то именно этот поинт будет создаваться. Если бы импорт был такой (не конкретный тип, а пакет): import java.awt.*; то результат был бы другой (использовался бы тип, объявленный в текущем пакете, т.е. в пакете my_geom)
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ