继承与合成
继承和组合是OOP(面向对象编程)中的两个重要概念。简单地说,组合和继承都处理向类提供附加属性或行为的问题。继承是类通过扩展父类从父类继承属性和行为的能力。另一方面,组合是一个类包含不同类的对象作为成员数据的能力。
什么是继承?
如上所述,继承是一个类通过扩展父类从父类继承属性和行为的能力。继承本质上通过允许通过新定义的类扩展现有类的属性和行为来提供代码重用。如果类A扩展B,那么类B称为父类(或父类),类A称为子类(或派生类/子类)。在这个示例场景中,类A将继承超级类(B)的所有公共和受保护的属性和方法。子类可以选择性地重写(为方法提供新的或扩展的功能)从父类继承的行为。
继承表示OOP中的“is-a”关系。这本质上意味着A也是B。换句话说,B可以是对某个真实世界实体进行一般描述的类,但A指定了某个专门化。在实际的编程问题中,可以扩展Person类来创建Employee类。这就是所谓的专业化。但您也可以先创建Employee类,然后再将其泛化为Person类(即泛化)。在本例中,雇员将拥有该人的所有属性和行为(即雇员也是人),并且可能还包含一些附加功能(因此,Person不是雇员)。
什么是作文?
组合是一个类包含不同类的对象作为成员数据的能力。例如,类A可以包含一个B类的对象作为成员。在这里,B中定义的所有公共方法(或函数)都可以在类A中执行。类A成为容器,而类B成为包含类。组成也被称为集装箱船。在这个例子中,可以说类A是由类B组成的。在OOP中,组合表示“有-A”关系。需要注意的是,即使容器有权执行所包含类的所有公共方法,它也不能更改或提供其他功能。当涉及到实际编程问题时,类TextBox的对象可能包含在类Form中,因此可以说Form包含TextBox(或者,表单由TextBox组成)。
遗传和合成有什么区别?