В исходном виде вывода не будет: программа не компилируется. ParentClass и его age не открыты для наследования, а Nested.friendName обращается к свойству как к статическому.
Определение результата вызова функции tryIt()
В исходном виде вывода не будет: программа не компилируется. ParentClass и его age не открыты для наследования, а Nested.friendName обращается к свойству как к статическому.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно выяснить, какой вывод будет получен при выполнении метода tryIt() в следующем коде.
class ParentClass {
private val age = 10
protected val name = "Bob"
protected class Nested {
public val friendName: String = "Alice"
}
}
class ChildClass : ParentClass() {
override val age = 25
fun tryIt() {
println("$name is $age")
println("${Nested.friendName} friend for $name")
}
}
Ответ
В исходном виде вывода не будет: программа не компилируется. ParentClass и его age не открыты для наследования, а Nested.friendName обращается к свойству как к статическому.
Для задуманного результата объявите open class ParentClass, замените private val age на protected open val age и обращайтесь через Nested().friendName. После этих исправлений ChildClass().tryIt() напечатает Bob is 25 и Alice friend for Bob. Если менять контракт родителя нельзя, override age нужно убрать и использовать другое собственное свойство наследника.
Источник: kotlinlang.org.