0
interface IA {
    fun callMe()
}

abstract class AbstractA {
    abstract fun callMe()
}

// Allowed
class ImplementationA(a: IA): IA by a

//Why this is Not Allowed ?
class ImplementationA(a: AbstractA): AbstractA() by a

我找不到任何令人满意的理由说明为什么不能使用“by”关键字委托抽象类。

注意:也就是说we need to call constructor of Abstract class while extending it,这不是问题的令人满意的技术答案。

4

1 回答 1

1

这是不可能的,因为委派仅限于接口。

比方说,一个主要原因是违反合同——如果一个类被委托,那么“默认”方法,比如,,toString——它们应该被委托还是不被委托?hashCodeequals

这个问题(为什么在 Kotlin 中只能委托接口)解释了为什么会这样以及放弃这个限制会产生什么后果。

于 2021-05-10T10:37:28.993 回答