`

Java组合和继承的区别

阅读更多

    组合和继承是面向对象中两种代码复用的方式。组合是指在新的类中创建原有类的对象,重复利用已有类的功能。继承是面向对象的主要特征之一,它允许设计人员根据其他类的实现来定义一个类的实现。组合和继承都允许在新的类中设置子对象,只是组合是显式的,而继承则是隐式的。组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。

    二者的区别在哪里呢?首先分析一个实例。Car表示汽车对象,Vehicle表示交通工具对象,Tire表示轮胎对象。三者的关系如图所示。

    

 

    从图中可以看出,Car是Vehicle的一种,因此是一种继承关系(又被称为“is - a”关系);而Car包含了多个Tire,因此是一种组合关系(又被称为“has - a”关系)。其实现方式如下:

    继承的实现方式:

 

class Verhicle{

}

class Car extends Verhicle{

}

    组合的实现方式:

    

class Tire{

}
class Car extends Verhicle{
    private Tire t = new Tire();
}

     既然继承和组合都能实现代码的重用,那么在实际使用时又该如何选择呢?一般情况下,遵循以下两点原则:

    1. 除非两个类是“is - a”关系,否则不要轻易的使用继承,不要单纯的为了实现代码的重用而使用继承,因为过多的使用继承会破坏代码的可维护性。当父类被修改时,会影响到所有继承自它的子类,从而增加程序的维护难度和成本。

    2. 不要仅仅为了实现多态而使用继承。如果类之间没有“is - a”关系,可以通过实现组合的方式来达到相同的目的。设计模式中的策略模式可以很好的说明这一点,采用接口和组合的方式比采用继承的方式具有更好的可扩展性。

    由于Java语言只支持单继承,如果想同时继承多个类,在Java中是无法直接实现的。同时,在Java语言中,如果使用继承过多,也会让一个class里的内容臃肿不堪。所以,在Java语言中,能使用组合就尽量不要使用继承。

  • 大小: 23.7 KB
3
0
分享到:
评论

相关推荐

    浅析Java中的继承与组合

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

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

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

    Java组合与继承之间的选择

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

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

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

    Java中类的组合概念

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

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

    java精神(基于函数式组合子逻辑的javaparser框架) 一。 释名。 为什么叫精神? 如果你熟悉c++,那么你可能知道一个叫做”spirit”的parser库。...new A(new B(), new C())不也是从B和C组合成A了?”

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

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

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

    compare.java 演示前缀、后缀自加之间区别的程序 constCharExample.java 演示转义字符 converseNumber.java 逆向输出数字 daffodilNumber.java 求水仙花数 division.java 演示整除结果 errorCompoundVariable....

    JAVA基础课程讲义

    JAVA的特性和优势 14 JAVA应用程序的运行机制 15 JVM(JAVA VIRTUAL MACHINE) 16 Java运行时环境JRE(Java Runtime Environment) 17 JAVA语言应用范围 18 第一个JAVA程序 18 JAVA开发环境搭建 18 一个典型的JAVA程序的...

    daima.zip_java 继承 银行

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

    Java基础知识点总结.docx

    无论是工作学习,不断的总结是必不可少...Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java 性能优化 362

    疯狂JAVA讲义

    学生提问:为什么选择设置用户变量,用户变量和系统变量有什么区别呢? 11 1.5 第一个Java程序 12 1.5.1 编辑Java源代码 12 1.5.2 编译Java程序 13 学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件...

    java 编程入门思考

    13.19.11 列表框和组合框 13.19.12 滑杆和进度指示条 13.19.13 树 13.19.14 表格 13.19.15 卡片式对话框 13.19.16 Swing消息框 13.19.17 Swing更多的知识 13.20 总结 13.21 练习 第14章 多线程 14.1 反应灵敏的用户...

    Java初学者入门教学

    13.19.11 列表框和组合框 13.19.12 滑杆和进度指示条 13.19.13 树 13.19.14 表格 13.19.15 卡片式对话框 13.19.16 Swing消息框 13.19.17 Swing更多的知识 13.20 总结 13.21 练习 第14章 多线程 14.1 反应灵敏的用户...

    java联想(中文)

    13.19.11 列表框和组合框 13.19.12 滑杆和进度指示条 13.19.13 树 13.19.14 表格 13.19.15 卡片式对话框 13.19.16 Swing消息框 13.19.17 Swing更多的知识 13.20 总结 13.21 练习 第14章 多线程 14.1 反应灵敏的用户...

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

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

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

    18 第3章 标识符和基本数据类型 19 3.1 Java的基本语法单位 19 3.1.1 空白、注释及语句 19 3.1.2 关键字 21 3.1.3 标识符 21 3.2 Java编码体例 22 3.3 Java的基本数据类型 23 3.3.1 变量和常量 23 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    java三大特性说明

    组合复用:选取某个类型中的一个对象的方法实现作为该类的方法实现过程,这两个类也称为理论父类和理论子类. 程序中是不出现extends关键字对两个类关系的描述的.  通过具体实例抽象出父类的过程称为泛化  通过...

Global site tag (gtag.js) - Google Analytics