Зачем нужно реализовывать базовые методы в интерфейсе

«Зачем нужно реализовывать базовые методы в интерфейсе» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Реализация базовых методов в интерфейсе (например, equals(), hashCode(), toString()) нужна для обеспечения консистентности поведения объектов. Это особенно важно при работе с коллекциями (HashMap, HashSet), которые полагаются на equals() и hashCode().

Пример с equals() и hashCode():

interface User {
    val id: Int
    val name: String

    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is User) return false
        return id == other.id
    }

    override fun hashCode(): Int = id
}

Без правильной реализации:

  • Объекты с одинаковыми данными могут считаться разными
  • Нарушится контракт equals-hashCode
  • Могут возникнуть проблемы при использовании в коллекциях