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

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

谢谢

这一切都取决于是否有必要拥有该类的实例

假设你有一个类Dog和一个类Cat 。 他们都延伸Animal 。 现在, Animal可能有一个名字和一些方法,但让Animal跑来跑去是没有意义的。 Animal是……一个抽象的概念。

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


要回答你的评论,“ 即使你不想实例化它,也能使一个类非抽象化。

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

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

从@aioobe开始 – 想想以下情况。

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

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

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