微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在以下情况下实现两个类还是一个类更好?

如何解决在以下情况下实现两个类还是一个类更好?

我有一个具有4个属性的类“ Vertex”和一个具有一个属性的类“ Vertex_”。 Vertex_中的一个属性也在Vertex中。保留两个类是一个好的设计还是只编写Vertex类更好,尽管在实例化只需要一个属性的对象时会有3个未使用的变量?

解决方法

Class Vertex_实际上有点像Class Vertex的副本。

我建议使用继承,让Class Vertex从父Class Vertex_继承属性,而让Class Vertex_没有其他3个属性。

,

TL; DR

这个问题值得一个很长的答案,继承有两个原因,继承的原因取决于所使用的语言。原因之一是代码重用。在不了解其他情况的情况下,似乎您只是在继承而已,只是重用了一个属性(但我怀疑您可能会重用更多的属性)。但是,还有其他方法可以在没有继承的情况下重用代码,例如,包含通常是更好的方法。

面向对象编程的强大功能是能够将一种类型的对象替换为另一种类型的对象。当消息发送到该对象时,将根据接收消息的对象的实际类型调用正确的方法实现。这是多态性的一种。但是在某些语言中,用一个对象替换另一个对象的能力受到了限制。在Java中,如果BA的后代,则只能用类B的实例替换类A的实例。因此,继承在Java中对于支持多态性变得很重要。

但是能够将B实例替换为A实例是什么意思?能行吗类A已建立一个合同,阐明其每个方法在成功调用之前需要具备的条件,并同时说明了每个方法承诺提供的内容。类B的方法是否符合合同规定?如果不是,您实际上不能用B代替A并期望程序正常运行。 B可能是A子类,但不是A子类型的(em> Liskov substitution principle]。

在诸如Python之类的语言中,多态不需要继承,编码人员更倾向于将其用作代码重用机制。但是,有些人认为子类化只能用于表达子类化。因此,如果Vertex_仅使用它继承的四个属性之一,那么我怀疑Vertex_的实例是否可以安全地代替Vertex的实例。除非语言是C++,否则我不会继承,然后我将使用私有继承。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。