类图 - 属性继承
我需要从一个类继承,并且只需要继承选定的属性,这可能吗?或者如果您需要所有属性,是否只能从类继承?
谢谢,
克里斯。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要从一个类继承,并且只需要继承选定的属性,这可能吗?或者如果您需要所有属性,是否只能从类继承?
谢谢,
克里斯。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
听起来您正在寻找实现继承而不是接口继承。请参阅此帖子了解说明,如果仍不清楚原因,请在下面注明。
鉴于您只想重用所选属性的子集,您最好使用组合而不是继承。
注意
它不能是接口继承(子类型),因为仅“继承”属性的子集,子类实例将无法替代超类实例。例如:假设子类未继承超类公开的属性
A
。在运行时,声明为超类类型的变量v
会绑定到子类的实例。然后表达式引用vA
。完全合理的请求 - 但显然会失败。换句话说,你破坏了接口契约。谷歌“里氏替换原理”了解更多信息。Sounds like you're looking for implementation inheritance rather than interface inheritance. See this thread for explanation, also note below if it's still not clear why.
Given that you're only looking to reuse a subset of the selected attributes you'd probably be better off using Composition instead of Inheritance.
Note
It can't be interface inheritance (subtyping) since, by only 'inheriting' a subset of attributes, a subclass instance would not be substitutable for a superclass instance. For example: assume the superclass exposed property
A
that the subclass didn't inherit. At run time, a variablev
declared as the superclass type gets bound to an instance of the subclass. An expression then referencesv.A
. Perfectly reasonable request - but it would obviously fail. In other words, you broke the interface contract. Google 'Liskov Substitution Principle' for more info.这是可能的。当超类定义属性时,任何子类都可以重新定义该属性以具有 [0..0] 重数。因此,子类只能继承它需要的内容。 但是,正如@sfinnie提到的,这打破了里氏替换,所以你最好知道你在做什么!
我手边的 UML 2.5 规范草案说:
It is possible. When a superclass defines an attribute, any subclass can redefine the attribute to have [0..0] multiplicity. Thus, the subclass can inherit only what it needs. However, as @sfinnie mentioned, this breaks Liskov Substitution, so you'd better know what you're doing!
A draft of the UML 2.5 spec I have handy says: