Kotlin 具体 class 从抽象 class 和接口扩展,接口使用抽象 class 中实现的方法

Kotlin concrete class extending from abstract class and interface, with the interface using a method implemented in the abstract class

我想问一个我有一些线索的问题,但我不想影响我将得到的答案。我有以下 class 层次结构:

abstract class MyAbstractClass { 
    fun displayStuff(id: String) {
        println("My id is $id.")
    }
}

interface MyInterface {
     fun displayThis() {
        displayStuff("some-value")
      }
     fun displayStuff(id: String) // Not implemented here
}

class MyConcreteClass(): MyAbstractClass(), MyInterface {
    fun doStuff() {
        displayThis()
    }
}

fun main() {    
    val result = MyConcreteClass()
    result.doStuff()
    result.displayStuff("id")
}

这个设计有什么问题,你建议我如何解决它?

displayStuff 提取到另一个界面可能不是一个坏主意。然后 MyAbstractClassMyInterface 都可以从同一个接口派生。 一个覆盖了 displayStuff 函数,因此为接口提供了类似于抽象基础实现的东西。 另一种是以特定的方式使用函数,从而扩展接口的功能。

interface DisplayStuff {
    fun displayStuff(id: String)
}

abstract class MyAbstractClass: DisplayStuff {
    override fun displayStuff(id: String) = println("My id is $id.")
}

interface MyInterface : DisplayStuff {
    fun displayThis() = displayStuff("some-value")
}