【发布时间】:2021-08-12 11:10:10
【问题描述】:
我有一个名为 Product 的基类。 “Drink”和“Pizza”类是从“Product”类继承的子类。 我还有一个名为“Ingredient”的类,它是 Pizza 类的一部分,因此 Pizza 类应该有一个 Ingredient 类的实例(列表)。
我的问题是: 由于成分与所有其他“产品”具有相同的属性,它是否也可以在与“披萨”子类一起工作时从“产品”类继承?
【问题讨论】:
-
如果
Ingredient类扩展了 Product 类指定的核心功能(相同的属性、相同的方法签名等),它应该从Product继承。但是,如果Products 具有/定义不代表成分的成员(例如,如果 Product 有一个名为SellToCustomer()的方法,您不想将其应用于比萨成分),则Ingredient类不应继承来自Product。Pizza和Ingredient是否保留彼此的引用并“一起工作”是完全不同的事情。 -
做对你更有意义的事。在您的业务环境中,一种成分可以被视为一种产品吗?如果是这样,那么您也希望它成为一种产品。
-
也许您可以创建一个项目,并且产品和成分/材料都从它继承,作为产品可以出售,而成分/材料用于创建产品。无论如何,你应该做有意义的事。如果您没有预见到合理的收益,也不要过度设计。
-
这似乎是教授面向对象的典型示例。但通常继承并不是最好的方法。 wizards and warriors 上的 Eric lipperts 文章可能会很长但很有用。
-
这个问题在 OOP 上下文中似乎是编程语言中立且相关的。 (我已经更新了标签)并且足够清楚可以回答。因此,我建议重新打开它。
标签: oop inheritance uml class-diagram class-design