在this线程中,我发现了一些有趣的时刻,如果类仅用作超类,则没有规则使其成为抽象的。为什么这样?
由于
答案 0 :(得分:10)
这完全取决于是否有理由拥有该类的实例。
假设您有一个班级Dog
和一个班级Cat
。它们都延伸Animal
。现在Animal
可能有一个名称和一些方法,但让Animal
运行是没有意义的。 Animal
是......一个抽象的概念。
在其他情况下,您可能有子类(LinkedHashSet
例如扩展HashSet
)但是实例化超类(在这种情况下为HashSet
)仍然很有意义。
要回答你的评论,“即使你不想实例化它,否则使一个类非抽象是否有意义。”
我会说,如果你,今天,根本不知道应该实例化的任何用例,同样的规则适用:有一个实例是否合理(逻辑上)这个类?如果是这样,那就把它变成非抽象的。
如果情况更像是“如果您已经创建了这个类的实例,那么您可能做错了!”然后我会通过使类抽象来澄清这一点。 / p>
答案 1 :(得分:4)
跟随@aioobe - 想想以下情况。
在公司中,您有一个名为会计的职位。现在,让我们假设你有一个专门从事审计的人,我们说他的头衔是 Auditor 。现在,该公司拥有100名会计师,但只有4名审计师。在这种情况下,您希望实例化会计和 Auditor 类,即使会计是超级 - Auditor 的类。
答案 2 :(得分:1)
如果类是完整且可用的,那么即使用户决定稍后扩展它,您也应该能够实例化并使用该类。
如果用户需要实现一些逻辑以使其在使用它的框架内起作用,那么该类应该只是抽象的,即类设计者不知道如何使用类的确切实现细节,例如模板或命令设计模式。