【问题标题】:Should virtual be default or final be default?virtual 应该是默认的还是 final 是默认的?
【发布时间】:2018-07-05 09:28:50
【问题描述】:

默认情况下为虚拟的函数是否违反关闭修改? 函数默认为 final 是否违反 open for extension?

如果实现了多重继承,函数是否应该默认为 final?

上课怎么样? 它们应该是默认的虚拟还是默认的最终?

或者 final 和 virtual 都应该是显式的? (即强制编码器将每个函数或类声明为最终或虚拟,就像在大多数语言中没有默认返回类型一样。)因为显式优于隐式。

final表示一个函数或一个类不能被继承或覆盖,virtual表示一个函数或一个类可以被继承或覆盖。

【问题讨论】:

  • “打开”和“关闭”在这种情况下没有任何意义。
  • @EJP 来自 kotlin...
  • open 来自 Kotlin,它不会出现在您的标签中。 close 还不是来自任何地方。
  • @EJP 是的,我意识到并编辑了问题。
  • @shawnhcorey 很有趣。我认为继承应该是松耦合的,所以我猜这回答了我的问题。如果它们是松耦合的,那么 final 应该是默认的,如果它们是紧密耦合的,那么 virtual 应该是默认的?

标签: oop language-design


【解决方案1】:

将类设置为默认虚拟将意味着代码之间的耦合更紧密,因为鼓励继承,但组合和接口超过继承,因此不鼓励继承,因此在我看来,类应该默认为 final。与函数相同,默认情况下它们是虚拟的,不仅违反 close 修改,而且鼓励继承,这意味着代码之间的耦合更紧密。

明确说明它们可能是一种选择,但这只会为您的代码增加冗余..

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多