Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
open class Shape {
open fun name() = "shape"
fun describe() = "I'm a ${name()}"
}
class Circle : Shape() {
override fun name() = "circle"
}
fun main() {
val s: Shape = Circle()
println(s.describe())
}I'm a circle
- Ждать
I'm a shape: считать, что версиюname()выбирает типShapeуsили то, чтоdescribe()написан вShape. Объект —Circle, поэтому работает его переопределение. - Ждать ошибки компиляции: считать, что переменная типа
Shapeне может хранитьCircle.Circle— этоShape, поэтому присваивание разрешено.
- Что произойдёт, если убрать
openуname()вShape? - Что выведет
Shape().describe()?