Відповідь Джессі близька, але я думаю, що є кращий код, який продемонструє, чому внутрішній інтерфейс може бути корисним. Подивіться на код нижче, перш ніж читати далі. Чи можете ви знайти, чому внутрішній інтерфейс корисний? Відповідь полягає в тому, що клас DoSomethingAlready може бути примірник будь-якого класу, який реалізує A і C; не тільки конкретний клас Зоопарк. Звичайно, цього можна досягти, навіть якщо зміна струму не є внутрішнім, але уявіть, як об'єднати довші імена (не лише A і C), і робити це для інших комбінацій (скажімо, A і B, C і B тощо), і ви легко подивіться, як все виходить з-під контролю. Не кажучи вже про те, що люди, які переглядають ваше початкове дерево, будуть переповнені інтерфейсами, які мають сенс лише в одному класі. Отже, підсумовуючи,внутрішній інтерфейс дозволяє будувати власні типи та покращує їх інкапсуляцію .
class ConcreteA implements A {
:
}
class ConcreteB implements B {
:
}
class ConcreteC implements C {
:
}
class Zoo implements A, C {
:
}
class DoSomethingAlready {
interface AC extends A, C { }
private final AC ac;
DoSomethingAlready(AC ac) {
this.ac = ac;
}
}