Ответ
Используйте интерфейсы, когда нужно определить контракт для классов без привязки к их реализации. Основные случаи:
- Множественное наследование – класс может реализовать несколько интерфейсов.
- Слабосвязанный код – например, колбэки или слушатели:
interface OnItemClickListener {
fun onItemClick(position: Int)
}
- Тестирование – легко подменить реальную реализацию mock-объектом.
- API-контракты – когда разные команды работают над разными модулями.
Интерфейсы особенно полезны в архитектурных подходах типа Clean Architecture или MVP/MVVM для разделения слоёв.