继承和组合之间的区别
2022-08-31 05:38:14
组成和继承是一样的吗?如果我想实现组合模式,我该如何在Java中做到这一点?
组成和继承是一样的吗?如果我想实现组合模式,我该如何在Java中做到这一点?
他们是绝对不同的。继承是一种“是-a”关系。构图是一个“有-a”。
通过将另一个类的实例作为类的字段来执行组合,而不是扩展 。一个很好的例子,其中组合会比继承好得多,这是目前扩展的。这现在被认为是一个错误。堆栈“不是”向量;不应允许任意插入和删除元素。它应该是构图。C
C
java.util.Stack
java.util.Vector
不幸的是,纠正这个设计错误为时已晚,因为现在更改继承层次结构会破坏与现有代码的兼容性。如果 Stack
使用组合而不是继承,则始终可以对其进行修改以使用其他数据结构,而不会违反 API。
我强烈推荐Josh Bloch的书《Effective Java 2nd Edition》
好的面向对象设计并不是要自由地扩展现有的类。你的第一本能应该是作曲。
另请参阅:
组合意味着
继承意味着继承HAS A
IS 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.
}