// A With nullability abstract class AbstractResourceTopic private constructor(private val state: ResourceState?, private val isOn: Boolean?) { constructor(state: ResourceState) : this(state = state, isOn = null) constructor(isOn: Boolean) : this(state = null, isOn = isOn) } // B with different types abstract class AbstractResourceTopic private constructor(private val resourceTopicType: ResourceTopicType) { constructor(state: Int) : this(ResourceTopicType.A(state)) constructor(isOn: Boolean) : this(ResourceTopicType.B(isOn)) sealed class ResourceTopicType{ data class A(val state: ResourceState): ResourceTopicType() data class B(val isOn: Boolean): ResourceTopicType() } } }