我有两个班级class A和class B。我希望B类具有 A 类的功能加上它自己的更多功能。一种非常简单的方法是从类 A继承类 B。但是由于某些实现特定的原因,我不能这样做。
我想到了另一种解决方案,我将在其中创建另一个包含所有虚函数的类 C。类A 和 B将继承自类 C。类 A将包含虚函数的实现,类 B也可以定义相同的函数集,因此类 B将具有类 A 的功能。这是最佳解决方案吗?除了直接从类 A继承类 B之外,还有比这更好的解决方案吗?
我有两个班级class A和class B。我希望B类具有 A 类的功能加上它自己的更多功能。一种非常简单的方法是从类 A继承类 B。但是由于某些实现特定的原因,我不能这样做。
我想到了另一种解决方案,我将在其中创建另一个包含所有虚函数的类 C。类A 和 B将继承自类 C。类 A将包含虚函数的实现,类 B也可以定义相同的函数集,因此类 B将具有类 A 的功能。这是最佳解决方案吗?除了直接从类 A继承类 B之外,还有比这更好的解决方案吗?
您要查找的内容称为Composition (over Inheritance)。
面向对象编程中的组合优于继承(或组合重用原则)是一种技术,通过该技术,类可以通过包含实现所需功能的其他类而不是通过继承来实现多态行为和代码重用。
这意味着您可以包含 的实例,而不是class B
继承自。这也是避免和之间紧密耦合的良好编码习惯。class A
class B
class A
class A
class B
您可以通过创建另外两个类PA
和PB
wherePB
继承来使用代理类PA
。这些代理类复制了各自的接口,但实际上并没有A
实现它们。相反,他们只是在and的实例中调用函数。B
A
B
您可以这样做,但是如果您创建class C
为一个抽象基类并让 A 类和 B 类继承自它,那么您就会意识到这一点,class A
并且class B
除了它们从同一个抽象基类继承这一事实之外,它们将是无关的。这意味着您将无法将实例转换为class B
toA
等。通常,此类实现取决于用例。
例如:
你class C
的是Person
,class A
是Teacher
,class B
是Student
。那么学生不是老师,老师也不是学生,所以这样的实现是有效的。