Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
• сначала просматриваются выражения, импортирующие типы;
• затем другие типы, объявленные в текущем пакете, в том числе в текущем модуле компиляции;
• наконец, просматриваются выражения, импортирующие пакеты.
Таким образом, если тип явно импортирован, то невозможно ни объявление нового типа с таким же именем, ни доступ по простому имени к одноименному типу в текущем пакете.
Например:
II пример вызовет ошибку компиляции package my_geom;
import java.awt.Point;
class Point { }
Этот модуль вызовет ошибку компиляции, так как имя Point в объявлении высшего типа будет рассматриваться как обращение к импортированному классу java.awt.Point, а его переопределять, конечно, йнельзя.
Если в пакете объявлен тип:
package my_geom;
class Point { }
то в другом модуле компиляции:
package my_geom;
import java.awt.Point;
class Line { void main() {
System.out.println(new Point());
}
}
складывается неопределенная ситуация - какой из классов, my_geom. Point Или java.awt.Point, будет использоваться при создании объекта? Результатом будет:
java.awt.Point[x=0,y=0]
В соответствии с правилами, имя Point было трактовано на основе Импорта типа. К классу текущего пакета все еще можно обращаться по •полному имени: my_geom.Point. Если бы рассматривался безымянный Чакет, то обратиться к такому "перекрытому" типу было бы уже невозмож-1,0> что является дополнительным аргументом к рекомендации распола-|*1ъ важные программы в именованных пакетах.
Теперь рассмотрим импорт пакета. Его еще называют "импорт по требованию", подразумевая, что никакой "загрузки" всех типов импортированного пакета сразу при указании импортирующего выражения не происходит, их полные имена подставляются по мере использования простых имен в коде. Можно импортировать пакет и задействовать только один тип (или даже ни одного) из него.
Изменим рассмотренный выше пример:
package my_geom;
import java.avvt.*;
class Line { void main() {
System.out.println(new PointO); System.out.println(new RectangleQ);
}
}
Теперь результатом будет:
my_geom.Point@92d342 java.awt.Rectangle[x=0,y=0,width=0,height=0]
Тип Point нашелся в текущем пакете, поэтому компилятору не пришлось выполнять поиск по пакету java.awt. Второй объект порождается от класса Rectangle, которого не существует в текущем пакете, зато он обнаруживается в java.awt.