继承和组合之间的区别

2022-08-31 05:38:14

组成和继承是一样的吗?如果我想实现组合模式,我该如何在Java中做到这一点?


答案 1

他们是绝对不同的。继承是一种“是-a”关系。构图是一个“有-a”。

通过将另一个类的实例作为类的字段来执行组合,而不是扩展 。一个很好的例子,其中组合会比继承好得多,这是目前扩展的。这现在被认为是一个错误。堆栈“不是”向量;不应允许任意插入和删除元素。它应该是构图。CCjava.util.Stackjava.util.Vector

不幸的是,纠正这个设计错误为时已晚,因为现在更改继承层次结构会破坏与现有代码的兼容性。如果 Stack 使用组合而不是继承,则始终可以对其进行修改以使用其他数据结构,而不会违反 API

我强烈推荐Josh Bloch的书《Effective Java 2nd Edition》

  • 项目16:支持组合而不是继承
  • 第17项:供继承或禁止继承的设计和文件

好的面向对象设计并不是要自由地扩展现有的类。你的第一本能应该是作曲。


另请参阅:


答案 2

组合意味着
继承意味着继承HAS AIS A

Example:汽车发动机,汽车汽车

在编程中,这表示为:

class Engine {} // The Engine class.

class Automobile {} // Automobile class which is parent to Car class.

class Car extends Automobile { // Car is an Automobile, so Car class extends Automobile class.
  private Engine engine; // Car has an Engine so, Car class has an instance of Engine class as its member.
}