根据网络上大家对继承和组合的讨论,我简单总结以下几点:
1)组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。
2)组合关系在运行期决定,而继承关系在编译期就已经决定了。
3)组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。
4)当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须的方法,而使用继承关系时,父类的所有方法和变量都被子类无条件继承,子类不能选择。
5)最重要的一点,使用继承关系时,可以实现类型的回溯,即用父类变量引用子类对象,这样便可以实现多态,而组合没有这个特性。
6)还有一点需要注意,如果你确定复用另外一个类的方法永远不需要改变时,应该使用组合,因为组合只是简单地复用被包含类的接口,而继承除了复用父类的接口外,它甚至还可以覆盖这些接口,修改父类接口的默认实现,这个特性是组合所不具有的。
7)从逻辑上看,组合最主要地体现的是一种整体和部分的思想,例如在电脑类是由内存类,CPU类,硬盘类等等组成的,而继承则体现的是一种可以回溯的父子关系,子类也是父类的一个对象。
8)这两者的区别主要体现在类的抽象阶段,在分析类之间的关系时就应该确定是采用组合还是采用继承。
9)引用网友的一句很经典的话应该更能让大家分清继承和组合的区别:组合可以被说成“我请了个老头在我家里干活” ,继承则是“我父亲在家里帮我干活"。
大家还可以参考这篇文章:
面向对象之继承和组合浅谈
分享到:
相关推荐
### Java中的继承与组合在图形类定义中的应用 在Java编程语言中,继承与组合是面向对象编程(OOP)的两大核心概念。通过继承,一个类可以从另一个类那里继承属性和方法,从而实现代码的复用;而通过组合,则是在类...
总的来说,理解和合理运用继承与组合是提高Java代码质量和可维护性的关键。在实际开发过程中,应根据业务需求和设计原则灵活选择,以实现最优的代码结构。通过深入理解这两种机制,开发者可以更好地设计出可扩展、可...
类的组合与继承不同,它是通过在类定义中嵌入其他类的实例来实现的,这种方式有助于提高代码的可重用性和模块化。 首先,我们来理解Java中类的概念。类是面向对象编程的基本单位,它定义了一组属性(成员变量)和...
这篇文章通过一个错误使用继承和组合的例子,探讨了这两者的区别以及如何避免不当使用带来的问题。 首先,让我们理解什么是“继承”和“组合”。继承是面向对象编程中的一个概念,允许一个类(子类)继承另一个类...
本文将深入探讨Java继承的基本语法、方法重载与覆盖、多态性,以及正确运用继承原则的重要性。 #### 继承的基本语法 在Java中,通过`extends`关键字实现类的继承。例如: ```java public class Sub extends Base ...
### Java编写的组合模式例子:建造一个工厂 #### 一、引言 组合模式(Composite Pattern)是一种结构型设计模式,允许将对象组合成树形结构,并以一致的方式处理单个对象与组合对象。该模式使得客户端代码可以一致...
组合模式的核心思想是"has-a"关系,即一个对象包含其他对象,这与继承的"is-a"关系不同。在Java中,我们通常通过接口或抽象类来定义共同的行为,然后由具体类实现这些行为,从而实现部分与整体的解耦。 首先,让...
在Java编程语言中,继承与面向接口编程是两种核心概念,它们构成了面向对象编程(OOP)的基础。然而,在实际开发过程中,过度依赖继承或不恰当地使用接口可能会导致代码结构复杂、维护困难等问题。本文将深入探讨...
由于继承,`Stack`继承了`Vector`的所有方法,包括与栈行为不符的`add(int index, E element)`等,这些方法在实际使用中可能导致逻辑错误或不必要的性能开销。Sun Microsystems(现为Oracle)对此的建议是谨慎使用`...
"Java继承总结" Java中的继承是面向对象三大特性之一,在知识点上存在许多重要的细节。下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是...
面向对象编程是Java的核心特性,本教程主要涵盖了三个关键概念:封装、继承和多态,以及相关的访问修饰符和方法修饰符。 封装是面向对象编程的基础,它涉及到将数据(属性)和操作这些数据的方法(行为)组合在一个...
这里虽然没有明确的继承关系,但可以通过组合(Composition)的方式复用`BankCount`类的功能。继承是多态的基础,多态性允许子类对象替换父类对象,且能够调用父类的公共方法,同时也可使用子类特有的方法。 实验中...
在第四章“继承与多态”中,我们深入探讨了这两个主题。 首先,继承允许一个类(子类)从另一个类(父类)继承特性,这样子类就可以重用父类的方法和属性,而无需重新编写。例如,在提供的内容中,`Employee`类被...
UML 中继承、实现、依赖、关联、聚合、组合的联系与区别 UML 中的继承关系是指一个类继承另外一个类的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系。在 Java 中此类关系通过...
Java 类的继承详解说明 Java语言中,继承是...继承与组合 继承和组合是两种不同的设计模式。继承是指子类继承父类的成员变量和方法,而组合是指一个类包含另一个类的对象。继承更应该叫做扩展,关键字是 extends。
在 JavaScript 中,继承主要通过原型链(prototype chain)、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等方法实现。以下是对这些继承方式的详细解释: 1. **原型链继承**:这是 JavaScript ...
本教程主要探讨如何通过继承和组合的方式来自定义控件,适用于已经有一定Android基础的开发者进行进阶学习。 首先,我们来理解自定义控件的两种基本方法:继承和组合。 1. **继承**: - **基础概念**:在Java或...
总的来说,"daima.zip"中的代码示例可能展示了如何利用Java的继承和类的组合来构建一个银行系统。通过这种方式,开发者可以构建出层次清晰、功能丰富的代码结构,便于理解和维护,同时满足业务需求的扩展。通过学习...
在本文中,我们将深入探讨Java中的组合与继承,并分析何时选择哪种方式。 **继承** 是面向对象编程的基本概念之一,它允许一个类(子类)从另一个类(父类)继承属性和方法。通过继承,子类可以重用父类的功能,...
### UML中依赖、泛化、关联、聚合与组合的Java实现详解 #### UML基础知识概览 统一建模语言(UML)作为一种图形化的标准化建模语言,为软件开发提供了强大的可视化工具,帮助开发者理解、设计和记录软件系统。UML...