您好我想知道为什么以下示例不起作用
abstract class BaseClass {
}
class ConcretClasOne : BaseCalculator {
}
class ConcretClasTwo : BaseCalculator {
}
abstract class BaseRun {
abstract fun run(param: BaseClass): Int
}
class ConcretRun : BaseRun {
override fun run(param: ConcretClasOne): Int {
return 0
}
}
这会向我显示一条消息run overrides nothing
。
我认为kotlin无法匹配抽象类和具体实现,但是还有其他替代方法可以模拟这种行为,具体类ConcretRun
中的run方法应该得到一个具体的参数ConcretClasOne
?
答案 0 :(得分:3)
使用泛型,可以使基类具有扩展基类的类型,以便run方法可以使用该类型。
abstract class BaseClass {
}
class ConcretClasOne: BaseCalculator {
}
class ConcretClasTwo: BaseCalculator {
}
abstract class BaseRun<T: BaseClass> {
abstract fun run(param: T): Int
}
class ConcretRun: BaseRun<ConcretClasOne> {
override fun run(param: ConcretClasOne): Int {
return 0
}
}
目前您尝试使用更具体的类型覆盖方法,但由于更通用的基本方法可以接受更多类型,因此更具体的方法无法覆盖它。