4
我看到过几个类似的问题,但没有一个解释为什么委托仅限于接口?为什么只有接口可以委托给kotlin?
大多数时间在实践中我们有一些实际上根本没有接口的东西,它是一个只实现一些功能或实现一个抽象类的类。
是否有任何根本性的限制,迫使它仅限于接口,或者我们可以期望kotlin在未来拥有无限制的授权?
如果我们想使用组合不继承来扩展类的功能,这将特别有用。
class A {}
class B(val a: A) : A by a {}
1.所以它不应该试图覆盖它。应该自动委托可重写的方法('open'或'abstact')。 2.所以'B'应该像往常一样将构造参数传递给'A'。 3.因为每个接口隐含地扩展了'Any',因此具有'equals','hashCode'和'toString',所以Kotlin作者必须为接口委派做出这个决定。 – Jesse
当然,这是一组可能的答案。但是,你不会“使用组合不继承的方式扩展类的功能”;你有一个非常奇怪的组合和继承组合,并且打开'A'中的方法而不改变它的行为(例如,因为你发现'C'需要重写它)可以改变'B'的行为。 –