Ответ 1
В Kotlin функции расширения не могут переопределять функции-члены, более того, они разрешены статически. Это означает, что если вы пишете функцию расширения fun Something.toString() = ...
, s.toString()
не будет разрешена к ней, потому что член всегда выигрывает.
Но в вашем случае ничто не мешает вам переопределить toString
внутри тела Something
, потому что классы data
могут иметь тела, подобные обычным классам:
data class Something(
val a: String,
val b: Any,
val c: String
) {
override fun toString(): String = a + b + c
}