Классы без public в Java
Если у класса верхнего уровня нет модификатора
public, он получает доступ по
умолчанию (его часто называют
package-private). Такой тип видят только
файлы того же пакета; из другого package
обратиться к нему нельзя:
package orders;
class Order {
int id;
Order(int id) {
this.id = id;
}
}
package orders;
public class OrderHelper {
public Order create() {
return new Order(1);
}
}
package app;
import orders.OrderHelper;
public class Main {
public static void main(String[] args) {
OrderHelper helper = new OrderHelper();
System.out.println(helper.create());
}
}
Класс OrderHelper публичен и доступен
в app. Класс Order без
public скрыт снаружи orders,
но OrderHelper в том же пакете
спокойно создаёт его экземпляры.
Так устроена типичная схема: наружу
выставляют public фасад, а
вспомогательные классы оставляют без
public, чтобы другие пакеты
не зависели от деталей реализации.
В пакете hr объявите класс
Employee без public с полем
name. Объявите public
класс EmployeeService, который
создаёт Employee и возвращает
имя. В пакете app вызовите
EmployeeService и выведите результат.
Объясните словами, почему из пакета
reports нельзя написать
new warehouse.Stock();, если
Stock объявлен без public
в warehouse.