java在什么情况下超类不应该是抽象的? 6 月,1 周 Questions & Answers 2236 在this线程中,我发现了一些有趣的时刻,若类仅用作超类,那个么并没有规则将其抽象化。为什么会这样 谢谢
# 1 楼答案 这完全取决于类的实例是否有意义 例如,假设您有一个类Dog和一个类Cat。它们都扩展了Animal。现在一个Animal可能有一个名称和一些方法,但是让Animal运行是没有意义的。一个Animal是。。。这是一个抽象的概念 在其他情况下,您可能有子类(例如LinkedHashSet扩展了HashSet),但实例化超类(在本例中为HashSet)仍然很有意义 为了回答您的评论,“即使您不想实例化一个类,也将其设置为非抽象类是否有意义。” 好吧,我想说,如果你今天根本不知道应该实例化它的任何用例,那么同样的规则也适用:拥有类的实例(逻辑上)有意义吗如果是,则使其非抽象 如果情况更像“如果你创建了这个类的一个实例,那么你可能做错了!”,那么我将通过使这个类抽象来澄清这一点
# 2 楼答案 从@aioobe开始跟踪-考虑以下情况 在公司里,你有一个叫会计的职位。现在,假设你有一个专门从事审计,我们说他的头衔是审计员。这家公司现在只有4名会计师。在这种情况下,您希望实例化会计和审计员类,即使会计是审计员的超类
# 3 楼答案 如果用户决定要完成并在以后使用该类,那么实例化该类是有意义的 只有当用户需要实现某些逻辑以使其在使用该类的框架内发挥功能时,该类才应该是抽象的,即类设计器不知道如何使用该类的确切实现细节,例如模板或命令设计模式
# 1 楼答案
这完全取决于类的实例是否有意义
例如,假设您有一个类
Dog
和一个类Cat
。它们都扩展了Animal
。现在一个Animal
可能有一个名称和一些方法,但是让Animal
运行是没有意义的。一个Animal
是。。。这是一个抽象的概念在其他情况下,您可能有子类(例如
LinkedHashSet
扩展了HashSet
),但实例化超类(在本例中为HashSet
)仍然很有意义为了回答您的评论,“即使您不想实例化一个类,也将其设置为非抽象类是否有意义。”
好吧,我想说,如果你今天根本不知道应该实例化它的任何用例,那么同样的规则也适用:拥有类的实例(逻辑上)有意义吗如果是,则使其非抽象
如果情况更像“如果你创建了这个类的一个实例,那么你可能做错了!”,那么我将通过使这个类抽象来澄清这一点
# 2 楼答案
从@aioobe开始跟踪-考虑以下情况
在公司里,你有一个叫会计的职位。现在,假设你有一个专门从事审计,我们说他的头衔是审计员。这家公司现在只有4名会计师。在这种情况下,您希望实例化会计和审计员类,即使会计是审计员的超类
# 3 楼答案
如果用户决定要完成并在以后使用该类,那么实例化该类是有意义的
只有当用户需要实现某些逻辑以使其在使用该类的框架内发挥功能时,该类才应该是抽象的,即类设计器不知道如何使用该类的确切实现细节,例如模板或命令设计模式