Возьмите следующую реализацию.
public interface Monitorable {
public Statistics getStatistics();
}
public interface MonitorManager {
public Monitorable getMonitorable();
}
class MonitorableService implements Monitorable, MonitorManager {
public Monitorable getMonitorable() {
return this;
}
}
// Meanwhile somwhere else...
MonitorManager manager = getMonitorManagerFromSomewhere();
Monitorable monitorable = manager.getMonitorable();
Я признаю, что это довольно надумано, но общий шаблон / сообщение должно быть четким.
Здесь мне не нужно знать, что MonitorManager реализуется классом Application. Также мне не нужно знать, что приложение Monitorable реализуется приложением.
Здесь полиморфизм используется для инкапсуляции деталей реализации Application. Который не публичный класс. Это очень распространенная модель, и ее можно увидеть в самых разных проектах.