首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宣布期末考试?

宣布期末考试?
EN

Software Engineering用户
提问于 2015-05-17 23:14:20
回答 2查看 4.4K关注 0票数 17

我喜欢我的代码写得很好;然而,我遇到的不是真正的问题,而是更多关于约定的问题。说我有这门课。

代码语言:javascript
复制
public class Test {

    public void doStuff() {
        System.out.println("stuff");
    }
}

这个类不会被扩展,所以它应该是最终的吗?我知道,当您不希望扩展一个类时,您会将它变成最终的;但是,在这种情况下,类将不会被扩展。抱歉,如果这让人困惑的话。我基本上在想,你是否应该让每一堂不会被延长到最后阶段的课。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2015-05-17 23:47:12

对于校验方式,我有一个爱/恨的关系的规则之一是在班级设计部分- 可拓设计。我经常发现自己关掉了它,因为跟从'T‘是很烦人的--特别是在大型遗留项目中,如果没有遵循它(检查样式发出了大量警告,就很难修复其中的任何一个)。

尽管如此,这是一个相当简单的规则:

确切的规则是,可以子类的非私有、非静态类方法必须是

  • 抽象的或
  • 最终的或
  • 有一个空的实现。

如果您可以对一个类进行子类化,则应该使它能够以一种有意义的方式进行扩展。

“等等,”你说,“这是关于公共非静态方法的,这些方法要么是抽象的,要么是最终的,或者是空的。这与最终的类有什么关系?”

确切的规则是,可以子类的非私有、非静态类方法必须.

如果你离开一个非决赛类,你是在说它可以有意义地被子类化。如果它不能,那么它就不能被子类化。

通过使类最终完成,您的同事通过创建一个公开所有特定于实现的方法的子类来对其内部进行修改就有点困难了。没有什么比追踪一个bug更好的事情了,因为你写的一个不可变的东西被子类化了--相信我。

为继承而设计是昂贵的。这需要额外的思考,以确保你是正确的。其他人不会把事情搞砸。通过说final class,你避免了所有这些,说“不-这不能继承”,并使它更容易解释。

如果您没有将时间花在设计类的可扩展性上,那么应该做的是确保没有人因为认为类是可扩展的而犯了错误。

相关阅读:

票数 13
EN

Software Engineering用户

发布于 2015-05-17 23:48:40

Eric有一个关于为什么要标记最终类的优秀博客帖子。具体来说,他提到了微软声明.NET框架类sealed的实践,但原则是相同的。

总之,编写可扩展类与编写final类完全不同。

  • 密封类意味着您不必考虑消费者可能通过扩展类而破坏类的无数种方式。
  • 编写可扩展类需要更严格的设计过程。您必须将它们设计成易于、清晰和逻辑上可扩展的设计,如果简单地密封类,则无需考虑这个设计问题。
  • 如果允许继承类,则会丢失封装。
  • 支持可扩展类要复杂得多。是的,你必须支持消费者扩展它的许多方式。如果您稍后升级这个类,您必须担心破坏了用户的扩展。

另请参阅

为什么类在默认情况下不被密封?

票数 11
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/284156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档