sealed class A { sealed class AWithM : A() { abstract val m: Int data class X(override val m: Int) : AWithM() data class Y(override val m: Int) : AWithM() data class Z(override val m: Int) : AWithM() } }