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