Философия Java

Пакет по умолчанию


Вы, возможно, удивитесь, когда узнаете, что следующий код компилируется, хотя Вам может показаться, что он нарушает правила языка Java:

//: c05:Cake.java

// Получает дочтуп к классу // в другом модуле комиляции

class Cake { public static void main(String[] args) { Pie x = new Pie(); x.f(); } } ///:~

Другой файл в том же каталоге содержит следующее:

//: c05:Pie.java

// Другой класс.

class Pie { void f() { System.out.println("Pie.f()"); } } ///:~

Вначале Вы можете посчитать эти файлы абсолютно чужими, и все же Cake может создать объект Pie и вызвать его метод f( )! (Конечно, Вам нужно, чтобы CLASSPATH содержал ".", иначе файлы не будут компилироваться.) Вы можете подумать, что и класс Pie и его метод f( ) являются дружественными и недоступны объекту Cake. То, что они дружественны - это верно! А причина, по которой они доступны в Cake.java в том, что они находятся в одном и том же каталоге и не имеют конкретного имени пакета. Java считает эти файлы частью “пакета по умолчанию” для этого каталога, и поэтому, дружественными всем остальным файлам в этом каталоге.



Содержание раздела