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
提取到另一个界面可能不是一个坏主意。然后 MyAbstractClass
和 MyInterface
都可以从同一个接口派生。
一个覆盖了 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")
}
我想问一个我有一些线索的问题,但我不想影响我将得到的答案。我有以下 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
提取到另一个界面可能不是一个坏主意。然后 MyAbstractClass
和 MyInterface
都可以从同一个接口派生。
一个覆盖了 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")
}