Сам интерфейс может быть закрытым для пакета, а не методы в нем. Вы можете определить интерфейс, который может использоваться только (по имени) в пакете, в котором он определен, но его методы public
, как и все методы интерфейса. Если класс реализует этот интерфейс, методы, которые он определяет, должны быть public
. Ключевым моментом здесь является то, что интерфейс тип не виден за пределами пакета, а не методы. Документы не являются неправильными, потому что использование методов, определенных в интерфейсе, отличается от использования самого интерфейса.
Также имейте в виду, что при определении интерфейса не добавляйте public
до того, как определение метода ничего не изменит, поскольку все методы неявно public
.
Если класс (ы), которые вы используете для реализации интерфейса, сами по себе являются пакетно-частными, то public
сущность методов интерфейса, очевидно, не является проблемой. Конечно, вы могли бы также использовать абстрактный класс вместо интерфейса, если проблема единственного наследования не мешает вам:
abstract class Whatever {
abstract void foo();
abstract void bar();
}