白盒复用,黑盒复用
语言在继承上的设计带来了便利,这些便利在某些情况下恰恰又演变成了缺点
1.首先理解是什么,继承和组合的概念
2.继承的优点,但在一定条件下,优点反而是缺点,
父类所有公共的属性和方法都被子类无条件继承,子类不能选择,封装性不好,有可能造成误用,父类实
现中的任何变化必然会导致子类发生
变化
实际对象千变万化,若每一类的对象都有他们自己的类,类层次结构的迅速膨胀
继承 – 发生在编译时,因为它是静态的
代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。
(主要是讲关系的确定时间)
Q.你有没有听说过“组合优于继承”这样的说法呢?如果听说过的话,那么你是怎么理解的呢?
A.继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使是在
没有多态关系的情况下。是否使用继承的规则是继承只能用在类之间有“父子”关系的情况下。
不要仅仅为了代码复用而继承。当你使用组合来实现代码复用的时候,是不会产生继承关系的。过度使用
继承(通过“extends”关键字)的话,如果修改了父类,会损坏所有的子类。这是因为子类和父类的紧耦合
关系是在编译期产生的。
不要仅仅为了多态而继承。如果你的类之间没有继承关系,并且你想要实现多态,那么你可以通过接口和
组合的方式来实现,这样不仅可以实现代码重用,同时也可以实现运行时的灵活性。
这就是为什么四人帮(Gang of Four)的设计模式里更倾向于使用组合而不是继承的原因。面试者会在你的答
案里着重关注这几个词语——“耦合”,“静态还是动态”,以及“发生在编译期还是运行时”。运行时的灵
活性可以通过组合来实现,因为类可以在运行时动态地根据一个结果有条件或者无条件地进行组合。但是继承
却是静态的。
相关推荐
### CC编程指南--第10章 类的继承与组合 #### 1. 继承 (Inheritance) 在面向对象编程中,“继承”是核心概念之一,它允许创建一个新类(派生类)来继承现有类(基类或父类)的属性和行为。这一特性不仅提高了代码...
C++继承与组合类的综合案例.cpp
继承与组合各有优缺点。继承提供了强大的代码复用能力,但可能导致类层次过于复杂,甚至出现菱形继承问题,即多个基类有共同的祖先,子类继承自这些基类时可能会产生歧义。为解决这类问题,C++引入了虚继承(virtual...
在C++编程语言中,继承和组合是两种重要的面向对象设计原则,它们分别提供了不同的方式来实现代码的重用和类之间的关系。了解这两种机制的区别对于编写高效、可维护的代码至关重要。 首先,继承是一种机制,它允许...
根据给定的文件标题、描述、标签以及部分内容,本文将深入探讨C++中的两个核心概念:继承与组合。这两种机制都是面向对象编程中用于实现代码重用的重要手段,但它们在设计模式、实现细节以及适用场景上存在显著差异...
总的来说,理解和合理运用继承与组合是提高Java代码质量和可维护性的关键。在实际开发过程中,应根据业务需求和设计原则灵活选择,以实现最优的代码结构。通过深入理解这两种机制,开发者可以更好地设计出可扩展、可...
在编程世界中,继承与组合是面向对象编程的两个核心概念,它们允许我们构建复杂、可复用且灵活的软件系统。本章“编程思想14章:继承和组合的介绍”深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们。 ...
2.4 继承与组合是两种不同的关系,继承是"is-a"关系,组合是"has-a"关系。 2.5 虚基类是一种特殊的基类,它可以解决多继承时的二义性问题。含有虚基类的派生类的构造函数需要负责虚基类的初始化,最远派生类的构造...
### Java中的继承与组合在图形类定义中的应用 在Java编程语言中,继承与组合是面向对象编程(OOP)的两大核心概念。通过继承,一个类可以从另一个类那里继承属性和方法,从而实现代码的复用;而通过组合,则是在类...
#### 八、继承与组合 继承和组合是面向对象设计中两种不同的复用方式。**组合**是指在一个类中包含另一个类的对象作为成员,从而达到复用的目的。相比之下,继承更强调的是“is-a”(是一种)的关系,而组合强调的...
本讲稿主要涵盖了第五章关于继承与派生的内容,包括继承的基本概念、派生类的声明方法、派生类的构成、成员的访问属性、构造函数和析构函数的使用、多重继承、基类和派生类的转换,以及继承与组合的关系。...
继承与组合是两种不同的代码复用方式。继承通过类之间的关系实现,而组合则是通过对象之间的关系实现。组合通常被认为是更灵活的设计选择,因为它可以减少类之间的依赖性,提高系统的灵活性和可维护性。 在软件开发...
其中,“组合优于继承”是一条广为流传的原则,意味着在设计软件时,我们应该优先考虑使用组合(Composition)而不是继承(Inheritance)。这条原则的提出主要是为了解决继承带来的潜在问题,如代码的可维护性、可...
本题涉及了派生类和继承的多种概念,包括派生方式、成员访问、构造函数和析构函数的执行顺序、类型兼容规则、虚基类以及继承与组合的区别。 1. **派生方式**:在C++中,有三种派生方式,分别是public(公有继承)、...
组合与继承相比,它更多地被用来描述一种“拥有”关系,而不是“是”关系。类可以通过组合来拥有其他类的实例,这样可以提高代码的复用性,同时降低系统的耦合度,使类之间的依赖关系更加灵活和松散。在Python中实现...
Java 类的继承详解说明 Java语言中,继承是...继承与组合 继承和组合是两种不同的设计模式。继承是指子类继承父类的成员变量和方法,而组合是指一个类包含另一个类的对象。继承更应该叫做扩展,关键字是 extends。
在Decorator模式中,子类(Decorator)继承父类(Component),同时持有一个父类对象的引用,这就是继承与组合的结合。这种方式允许我们在运行时动态地给对象添加职责,但同时也可能导致类的层次结构变得复杂。 ...