Наследование классов и метод toString() в Kotlin
В моём проекте есть два класса: родительский - ProductRecord и дочерний data class - Product. В иерархии Product наследует поле name, далее я привожу дочерний к родительскому и получаю интересную ситуацию:
fun main() {
val prodRec = ProductRecord("Milk", 12)
val prod = Product("Egg", 23, 647)
val test: ProductRecord = prod
println(test.toString())
// Unresolved reference: money
// println("Наименование=${test.name} Количество=${test.number} Стоимость=${test.money}")
}
Вывод:
Имя=Egg, Количество=23, Стоимость=647
Т.е. доступа к свойству money я больше не имею, но метод toString() содержит ссылку на дочерний класс и выводит мне это поле.
Я читал, что классы данных и наследование не самые совместимые вещи, но хотелось бы иметь возможность приведения типа к родительскому с родительской реализацией toString().
P.s. переписал класс данных на обычный и переопределил toString(), проблема осталась та же самая. Пожалуйста, подскажите что я понимаю не так и как вместе со свойством money использовать реализацию метода toString() из родительского класса.
Ответы (1 шт):
Ситуация, которую я описал выше - это не каст, а присвоение ссылки экземпляра родителю, т.е. объект остаётся тот же самый. Для каста типов в Kotlin можно написать свою функцию расширения toProductRecord().