- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 Product 的基类。 “Drink”和“Pizza”类是从“Product”类继承的子类。我还有一个名为“Ingredient”的类,它是 Pizza 类的一部分,因此 Pizza 类应该有一个 Ingredient 类的实例(列表)。
我的问题是:由于 Ingredient 与所有其他“Products”具有相同的属性,它是否也可以继承“Product”类并与“Pizza”子类一起工作?
最佳答案
是的,从同一个父类(super class)继承的类可以完美地协同工作。没有不兼容。甚至还有一种设计模式在同一类上使用这两种关系(composite pattern)。
备注:“一起工作”这个词有些含糊不清,可能意味着不同的东西。但是您的类图足够精确,表明您的意思是可能的关联。
您的图表显示了 Pizza
之间的可导航关联和 Ingredient
(空心箭头)。这意味着实现应确保比萨饼可以轻松找到其配料。
在您的叙述中,您提到了一个列表。我知道 Ingredient
可以没有任何 Pizza 存在,但是 Pizza 可以有多个 Ingredient
.通过指示 *
在图表上指定此多重性很重要在 Ingredient
上协会方面。
相反方向的关系还有一些谜团:
Ingredient
应该能够轻松找到相关的比萨饼,或者如果这不相关。您可以使用相反方向的箭头(可导航)或跨线的 X(不可导航)进一步指定。您有权不指定并稍后决定。可导航性对类协同工作的方式有影响:这意味着 Pizza
可以“使用”配料(例如,将其用作操作中的参数,直接调用配料操作等)。但是在相反的方向没有通航能力意味着 Ingredient
无法单独发起与其比萨饼的合作。0..1
),或者它是否可以在多个披萨之间共享 (0..*
)。了解这一点非常重要,因为实现会非常不同(在后一种情况下,您将拥有多对多关联)。当发现 OOP 时,继承是很诱人的。然而,继承有很多含义、限制和后果。因此,请明智地使用它。
一个有用的建议是开始考虑 A 继承自 B,前提是 A 是更特殊的 B,或者相反,B 是 A 的更一般化。仅因为某些属性或操作共享而使用继承是危险的同名。顺便说一句,名称可能会产生误导。
在您的情况下,我理解 Product
作为公司以给定价格出售的东西:Drink
, Pizza
, 也许 Antipasti
或 Pasta
.显示的价格是客户要求的价格。因此,我想知道是否 Ingredient
被卖给客户。一种成分可能有价格,但它是购买价格。购买价格与销售价格不同:想象一家餐厅将分包一些非常特别的比萨饼:销售价格将与购买价格不同。
当然,如果您的 Product
是比较笼统的东西,商业意义上的,如果能有销售价和采购价,不一定在菜单上,那没问题,可以。但请注意,此类通用产品的管理要复杂得多(例如,这里有一个著名的 ERP example 有 20 多个不同的屏幕来管理产品的所有方面)。
一个很常见的建议是prefer composition over inheritance .这个经验法则旨在提醒我们在使用继承之前三思而后行。让我们明确一点,以防万一:这并不意味着继承和组合不兼容。
关于oop - 两个 child 类(class)是否可以一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68756325/
我的收藏具有以下结构 { _id:1, parent_id:0 } { _id:2, parent_id:1 } { _id:3, parent_id:1 } { _id:4, par
到目前为止,我已经尝试过获取该对象的所有子对象,但它只带来了两个子对象。不都是 child 的 child 。我如何获取所有内容并循环获取特定名称对象 Transform[] objChild = g
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个如下表 好吧,在这个表中每个用户都有一个父用户,那么如果我们选择一个用户,那么它的 id 、子代 id 和子代子代 id 应该作为数组返回。我需要一个查询来获取 Rails 中的这些值,而不使
我需要以下代码的帮助: HTML: process process 在点击 td[class=process] 时,我需要 input[name=dat
好的,所以我从中获得了一个 PHP,该 PHP 由依赖于手头动态情况的切换循环传播(我认为)。现在,当我添加一个复选框时,我希望能够使 div 中的第一个复选框具有顶部边框和侧面,没有底部。下面的只有
我正在使用 Swift 和 Sprite Kit。我有一个名为 MrNode 的 SKNode,它有多个 SKSpriteNodes 和 SKNode 子节点。一些SKNode有子节点,而这些子节点也
对不起,这个标题太俗了,但我真的不确定如何解释这个,我是新一代的 SQL 技能由于事件记录模式而退化的人之一! 基本上我在 PostgreSQL 中有三个表 客户端(一个客户端有很多 map ) -
我有这样的简单表格: 编号 parent_id 创建于 具有父/子关系...如果一行是子行,则它有一个 parent_id,否则它的 parent_id 为 0。 现在我想选择所有没有子项(因此本身)
所以我有这样的结构: 我的问题是:如何从每个主题中删除 ID 为 3Q41X2tKUMUmiDjXL1BJon70l8n2 的每个字段。我正在考虑这样的事情: admin.database().ref
这个问题在这里已经有了答案: Change opacity on all elements except hovered one (1 个回答) 关闭 5 个月前。 因此,当鼠标悬停在 child
我需要在 Delphi 5 中创建一个 QuickReport,其布局如下: +================ | Report Header +================ +========
假设我有这样的 html: Some more detailed code.... 我想知道如何在CSS中使用“A
我有一个使用 flexbox 的类似表格的布局: +--------------+---------------+-----------------+---------------+ | 1
我有一个关联,其中 user has_many user_items 和 user_items has_many user_item_images。与一个已经退出的用户。我可以创建一个新的 user_
我想选择无序列表中的前两个列表项。我可以这样选择第一项: ul li:nth-child(1) a { background: none repeat scroll 0 0 beige; }
ul li:first-child a { border-radius: 5px 5px 0 0; } ul li:last-child a { border-radius: 0 0 5p
我有一个这样的表:
或者这些术语用于指代同一事物? 我正在尝试在我的 Win32 应用程序中实现一些显示位图图像的自定义按钮。一个教程指出我应该使用 CreateWindow() 创建子窗口。 但是,我已经从另一个关于创
我想在 jquery 中获取我的 svg 的 id,我尝试了这个 jquery,但它是未定义的。 $(event.target).children('svg').attr("id") Target.e
我是一名优秀的程序员,十分优秀!