Эта строка здесь:
val ab: A = object : A(1), B {
означает, что класс ab
наследуется от класса A
и реализует интерфейс B
.
Собственно пример кода, который вы далибудет компилироваться, только если вы объявите и реализуете интерфейс.Это возможная реализация:
open class A(x: Int) {
public open val y: Int = x
}
interface B {
fun hi()
}
val ab: A = object : A(1), B {
override val y = 15
override fun hi() {
println("hi")
}
}
Выражение ${ab.A.y}
не имеет большого смысла в этом контексте, потому что объект ab
не имеет никакого поля A
.A
- это просто унаследованный суперкласс, к которому вы могли бы в конечном итоге привести.