`
xifangyuhui
  • 浏览: 186009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 继承与组合的区别

阅读更多

 

根据网络上大家对继承和组合的讨论,我简单总结以下几点:
1)组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。


2)组合关系在运行期决定,而继承关系在编译期就已经决定了。


3)组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。

4)当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须的方法,而使用继承关系时,父类的所有方法和变量都被子类无条件继承,子类不能选择。

5)最重要的一点,使用继承关系时,可以实现类型的回溯,即用父类变量引用子类对象,这样便可以实现多态,而组合没有这个特性。

6)还有一点需要注意,如果你确定复用另外一个类的方法永远不需要改变时,应该使用组合,因为组合只是简单地复用被包含类的接口,而继承除了复用父类的接口外,它甚至还可以覆盖这些接口,修改父类接口的默认实现,这个特性是组合所不具有的。

7)从逻辑上看,组合最主要地体现的是一种整体和部分的思想,例如在电脑类是由内存类,CPU类,硬盘类等等组成的,而继承则体现的是一种可以回溯的父子关系,子类也是父类的一个对象。

 

8)这两者的区别主要体现在类的抽象阶段,在分析类之间的关系时就应该确定是采用组合还是采用继承。

 

9)引用网友的一句很经典的话应该更能让大家分清继承和组合的区别:组合可以被说成“我请了个老头在我家里干活” ,继承则是“我父亲在家里帮我干活"。

 

大家还可以参考这篇文章: 面向对象之继承和组合浅谈

2
0
分享到:
评论

相关推荐

    java中继承和组合中图形的简单类的定义

    java中继承和组合中图形的简单类的定义 public abstract class Shape{ //抽象类Shape public abstract void draw(); }……………………

    浅析Java中的继承与组合

    本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。

    关于Java中的继承和组合的一个错误使用的例子

    主要介绍了关于Java中的继承和组合的一个错误使用的例子,需要的朋友可以参考下

    Java中类的组合概念

    正所谓,道生一,一生二,二生三,三生万物,如果将二进制表示和运算看做一,将基本数据类型看做二,基本数据类型形成的类看做三,那么,类的组合以及下节介绍的继承则使得三生万物。

    daima.zip_java 继承 银行

    关于银行的系统操作的基本描述,运用类的继承与类的组合

    javaparser:基于函数式组合子逻辑的JAVA语言分析框架

    java精神(基于函数式组合子逻辑的javaparser框架) 一。 释名。 为什么叫精神? 如果你熟悉c++,那么你可能知道一个叫做”spirit”的parser库。它利用c++的模板元编程能力,使用c++语言本身提供了一个递归下降文法...

    【JavaScript源代码】深入JS继承.docx

    原型式继承 原型链式继承 借用构造函数(类式继承) 组合继承 寄生组合式继承 结束语 前言 对于灵活的js而言,继承相比于java等语言,继承实现方式可谓百花齐放。方式的多样就意味着知识点繁多,当然也是面试时...

    Java组合与继承之间的选择

    组合和继承都允许在新的类中放置子对象,组合是显示的这样做,而继承则是隐式的做。  组合技术通常用于想在新类中使用现有类的功能而非他的接口。在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的...

    Java开发技术大全(500个源代码).

    differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...

    java继承详解

    定义常量的时候,常量的名字要大写,如果存在两个单词组合起来的名字,要用下划线连接 public static final int AGE = 23;// public static final String USER_NAME = "铁蛋"; 2、 当final修饰方法的时候,该方法...

    Java优化编程(第2版)

    Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...

    Java基础知识点总结.docx

    Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java...

    java 编程入门思考

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    JAVA语言程序设计【高清版】.pdf

    64 5.2.2 默认的构造方法 66 5.3 定义方法 67 5.3.1 方法定义格式 68 5.3.2 按值传递 71 5.4 类的继承 72 5.4.1 继承的定义 73 5.4.2 多态性与转换对象 74 5.5 继续讨论Java的关键字 77 5.5.1 ...

    Java初学者入门教学

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    JAVA基础课程讲义

    进程与程序的区别 168 JAVA中如何实现多线程(重点!!) 168 通过继承Thread类实现多线程 168 通过Runnable接口实现多线程 169 线程状态和sleep/yield/join/stop/destroy方法 170 新生状态 170 就绪状态 170 运行...

    java联想(中文)

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    Java 基础核心总结 +经典算法大全.rar

    与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 ...

Global site tag (gtag.js) - Google Analytics