首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在命名约定方面,我们是否需要区分接口类和抽象类?

在命名约定方面,我们是否需要区分接口类和抽象类?
EN

Stack Overflow用户
提问于 2009-09-03 06:03:21
回答 6查看 877关注 0票数 2

区分抽象类和接口类是否重要?

抽象类只是一个接口类,有一些具体的方法。

如果抽象类与Interface类具有相同的前缀"I“,则可以通过引入新的逻辑等方法,轻松地将接口类升级为抽象类。

更新

我问这个问题的原因是,当项目增长时,界面会施加一些限制。例如,

如果一个接口已经被上千个类“实现”了,并且在某个时候我们需要在基类中引入一些新的方法,那么我们将不得不修复所有的子类。

抽象类在功能扩展方面提供了灵活性,因为它可以在不影响子类的情况下提供默认实现。

这就是为什么我想要交替地使用接口和抽象类。

代码语言:javascript
运行
复制
ICar car = new Merz(); // ICar can be interface or abstract class

但是,当我再次考虑这个问题时,我们仍然需要更改所有的子类,因为类声明迫使我们在一开始就使用“扩展”或“实现”。

因此,我认为在抽象/接口类上没有进行多态的选择。

EN

回答 6

Stack Overflow用户

发布于 2009-09-03 06:05:31

"I“前缀并不是真正的Java方式。这是更多的C#。

对于Java,我通常使用以下约定:

  • 接口:生成器
  • 抽象类: AbstractBuilder
  • 混凝土类: BuilderImpl,DefaultBuilder,MyBuilder等

我认为这与Java标准(分别为Map、AbstractMap、HashMap )相当一致。

至于用抽象类替换接口,则需要重构。我认为最好为所有方法返回、数据成员类型、局部变量类型和参数使用接口。抽象类是(或应该是)实现细节。

回到Map示例,这意味着一切都是Map。您可以创建自己的Map子类。JDK为您提供了一个帮助类,它执行大多数样板。如果您根据抽象类声明了成员,您将被迫使用它,这不是最好的结果。

票数 13
EN

Stack Overflow用户

发布于 2009-09-03 06:05:42

不,您不能轻松地做到这一点,因为您可能也是从另一个类继承,而且Java不允许从类中进行多次继承。

最好有一个标准的命名结构。在Java中,我不确定您是否需要使用I前缀;我认为它是able后缀。不管是哪种方式,都要采用一种,并使之保持一致。

-编辑

对于抽象类,我的首选是Base后缀,但每个后缀都是自己的:)

票数 6
EN

Stack Overflow用户

发布于 2009-09-03 06:16:26

抽象类与特定事物上的接口有很大不同。

给定的类可以实现任意数量的接口,但只能扩展一个抽象类。

因此,应该以非常不同的方式对待它们,而不是在命名方面。为接口选择一个简短的描述性名称--您将再次看到它。例如,List是一个接口,但ArrayList是类。

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

https://stackoverflow.com/questions/1371639

复制
相关文章

相似问题

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