enum class ProtocolState { WAITING { override fun signal() = ProtocolState.TALKING } TALKING { override fun signal() = ProtocolState.WAITING } abstract fun signal() : ProtocolState } enum class Foo { X } fun box() { val x: ProtocolState = ProtocolState.WAITING }