Объявление внутренних подынтерфейсов - хорошая практика, но технически вы не можете объявить свои внутренние методы как protected
в интерфейсе в Java.
Конечно, вы можете создать другой интерфейс для внутреннего использования, который расширяетоткрытый интерфейс:
public interface YourPublicInterface {
public void doThing1();
public void doThing2();
public void doThing3();
interface Internal extends YourPublicInterface {
void doAnyInternalThing1();
void doAnyInternalThing2();
}
}
Вы можете использовать интерфейс Internal
внутри пакета, но вы должны принять любой подтип YourPublicInterface
(в открытых методах):
public class AClassInYourPackage {
public void someMethod(YourPublicInterface param) {
if (param instanceof YourPublicInterface.Internal) {
// run the optimized code
} else {
// run the general code
}
}
}
Вне пакета пользователи могут без проблем использовать YourPublicInterface
.
В обычной практике программисты создают абстрактные классы в похожих ситуациях.Однако в этом случае мы теряем преимущества множественного наследования.