0

Kotlin中重写方法时,必须声明定义方法的基类和方法本身open

重写方法后默认派生类final,而重写方法open默认。从参考文档:

标记为覆盖的成员本身是开放的,即它可以在子类中被覆盖。如果要禁止重新覆盖,请使用 final。

我想知道为什么Kotlin 团队做出了这个设计决定,而不是将重写的方法也设为 final,这是派生类和每个非重写方法的默认设置。搜索网络时找不到任何提示?

是否有人与此设计决策背后的推理有联系或可能会激发它?

4

2 回答 2

2

它更实用。如果该方法是开放的,则意味着它被设计为被覆盖,并且此类方法通常在类层次结构中被多次覆盖。并且将派生类标记为比对所有重写的方法也open重复修饰符要容易得多。open

于 2018-12-03T09:50:02.757 回答
1

您可能会争辩说这些属性实际上是相关的。如果该类被显式标记为open,则所有定义为 的属性和方法open在所有子类中都以相同的方式处理。如果子类未打开,则方法不可覆盖,无论它们自己的修饰符如何。

您可能也注意到了,原始定义的所有修饰符都是继承的。因此,您不必复制该信息,仅当您想更改签名时,您必须明确定义它。

于 2018-12-03T10:09:57.933 回答