trait A { fun foo(): String = "A" // TODO: B shoudn't be mentioned val some: String? get() = null // TODO: B shoudn't be mentioned var other: String? get() = null set(value) {} } open class B: A class C: B() { override val some: String = "S" override var other: String? get() = null set(value) {} override fun foo(): String { return super.foo() } }