在什么情况下超类不应该是抽象的?

时间:2010-11-30 06:57:01

标签: java abstract-class class-design

this线程中,我发现了一些有趣的时刻,如果类仅用作超类,则没有规则使其成为抽象的。为什么这样?

由于

3 个答案:

答案 0 :(得分:10)

这完全取决于是否有理由拥有该类的实例

假设您有一个班级Dog和一个班级Cat。它们都延伸Animal。现在Animal可能有一个名称和一些方法,但让Animal运行是没有意义的。 Animal是......一个抽象的概念。

在其他情况下,您可能有子类(LinkedHashSet例如扩展HashSet)但是实例化超类(在这种情况下为HashSet)仍然很有意义。


要回答你的评论,“即使你不想实例化它,否则使一个类非抽象是否有意义。

我会说,如果你,今天,根本不知道应该实例化的任何用例,同样的规则适用:有一个实例是否合理(逻辑上)这个类?如果是这样,那就把它变成非抽象的。

如果情况更像是“如果您已经创建了这个类的实例,那么您可能做错了!”然后我会通过使类抽象来澄清这一点。 / p>

答案 1 :(得分:4)

跟随@aioobe - 想想以下情况。

在公司中,您有一个名为会计的职位。现在,让我们假设你有一个专门从事审计的人,我们说他的头衔是 Auditor 。现在,该公司拥有100名会计师,但只有4名审计师。在这种情况下,您希望实例化会计 Auditor 类,即使会计是超级 - Auditor 的类。

答案 2 :(得分:1)

如果类是完整且可用的,那么即使用户决定稍后扩展它,您也应该能够实例化并使用该类。

如果用户需要实现一些逻辑以使其在使用它的框架内起作用,那么该类应该只是抽象的,即类设计者不知道如何使用类的确切实现细节,例如模板或命令设计模式。