Используются ли в equals поля родительского класса в data class

«Используются ли в equals поля родительского класса в data class» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin data class автоматически генерирует equals(), hashCode(), toString() и другие методы. При этом в equals() и hashCode() включаются только свойства, объявленные в первичном конструкторе текущего класса. Поля родительского класса не учитываются.

Пример:

open class Parent(val id: Int)
data class Child(val name: String, id: Int) : Parent(id)

fun main() {
    val a = Child("A", 1)
    val b = Child("A", 2)
    println(a == b) // true, так как сравнивается только `name`
}

Если нужно учитывать поля родителя, нужно переопределить equals()/hashCode() вручную.