Определение результата вызова функции tryIt()

В исходном виде вывода не будет: программа не компилируется. ParentClass и его age не открыты для наследования, а Nested.friendName обращается к свойству как к статическому.

Короткий ответ

Что ответить на собеседовании

В исходном виде вывода не будет: программа не компилируется. 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее