2

我有两个班级class Aclass B。我希望B类具有 A 类的功能加上它自己的更多功能。一种非常简单的方法是从类 A继承类 B。但是由于某些实现特定的原因,我不能这样做。

我想到了另一种解决方案,我将在其中创建另一个包含所有虚函数的类 C。A 和 B将继承自类 C类 A将包含虚函数的实现,类 B也可以定义相同的函数集,因此类 B将具有类 A 的功能。这是最佳解决方案吗?除了直接从类 A继承类 B之外,还有比这更好的解决方案吗?

4

4 回答 4

11

您要查找的内容称为Composition (over Inheritance)

面向对象编程中的组合优于继承(或组合重用原则)是一种技术,通过该技术,类可以通过包含实现所需功能的其他类而不是通过继承来实现多态行为和代码重用。

这意味着您可以包含 的实例,而不是class B继承自。这也是避免和之间紧密耦合的良好编码习惯class Aclass Bclass Aclass Aclass B

于 2012-10-29T09:35:42.417 回答
0

您可以通过创建另外两个类PAPBwherePB继承来使用代理类PA。这些代理类复制了各自的接口,但实际上并没有A实现它们。相反,他们只是在and的实例中调用函数。BAB

于 2012-10-29T09:40:11.653 回答
0

您可以这样做,但是如果您创建class C为一个抽象基类并让 A 类和 B 类继承自它,那么您就会意识到这一点,class A并且class B除了它们从同一个抽象基类继承这一事实之外,它们将是无关的。这意味着您将无法将实例转换为class BtoA等。通常,此类实现取决于用例。

例如:

class C的是Personclass ATeacherclass BStudent。那么学生不是老师,老师也不是学生,所以这样的实现是有效的。

于 2012-10-29T09:36:48.690 回答
0

A 类将包含虚函数的实现,B 类也可以定义相同的一组函数

这样你就会有代码重复,这不是一件好事。

如果您不想使用继承,请尝试组合。

我之前在这里解释了作文。

于 2012-10-29T09:37:24.500 回答