上下文
我最近看到了这个C#提案默认接口方法,我已经阅读了规范和更重要的是动机。可能我错过了什么,但是动机让我有点不舒服。
接口和完全抽象类之间唯一的实际区别曾经是,未来的类可以实现(因此是[IS A])多个接口,但只能继承(因此是[IS A])一个抽象类(以及所有的后果)
对我来说不清楚的是,除了我们可以使用具有默认方法的接口带入多(实现)继承(这在抽象类中不可能),现在接口和默认方法之间的确切差异是什么。 (我不想开放问题/讨论它是否好或坏,这不是这里的主题)
然而,动机谈论完全不同的三个要点:
- "...API作者可以在将来的版本中添加接口方法而不会破坏源代码..."。嗯,“API”作者也可以在未来版本中向抽象类中添加方法如果他们实现了它们而不会破坏任何东西。
- "...使C#能够与针对Android(Java)和iOS(Swift)的API进行交互,..."。我认为语言设计决策,特别是关于抽象和OOP模式的多重继承高于与Swift进行交互。我也认为,这只是0.0x%的互操作问题,也可以用其他方式解决。
- "事实证明,添加默认接口实现提供了“特征”语言特性的元素..."。这是一个非常肤浅的陈述,特别是它涉及到维基百科的“特征”。按照定义,特征允许添加方法而不需要多重继承(与超类之间具有 [IS A] 关系)。然而,接口确实与 [IS A] 有关...更不用说特征至少是可辩论的良好实践了。
问题
我的问题是真正的区别(或动机)是什么,或者我错过了什么?