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

Java程序设计之-复合优先于继承

    博客分类:
  • java
 
阅读更多
组合

通过创建一个由其他对象组合的对象来获得新功能的重用方法
新功能的获得是通过调用组合对象的功能实现的
有时又叫聚合
例如:
一个对象拥有或者对另外一个对象负责并且两个对象有相同的生命周期。(GOF)
一个对象包含另一个对象集合
被包含对象对其他对象是不可见的并且只能从包含它的对象中访问的特殊组合形式
组合的优缺点

优点
1. 被包含对象通过包含他们的类来访问
2. 黑盒重用,因为被包含对象的内部细节是不可见的
3. 很好的封装
4. 每个类专注于一个任务
5. 通过获得和被包含对象的类型相同的对象引用,可以在运行时动态定义组合的方式
缺点
1. 结果系统可能会包含更多的对象
2. 为了使组合时可以使用不同的对象,必须小心的定义接口

继承

通过扩展已实现的对象来获得新功能的重用方法
基类有用通用的属性和方法
子类提供更多的属性和方法来扩展基类
继承的优缺点

优点
1. 新的实现很容易,因为大部分是继承而来的
2. 很容易修改和扩展已有的实现
缺点
1. 打破了封装,因为基类向子类暴露了实现细节
2. 白盒重用,因为基类的内部细节通常对子类是可见的
3. 当父类的实现改变时可能要相应的对子类做出改变
4. 不能在运行时改变由父类继承来的实现


由此可见,组合比继承具有更大的灵活性和更稳定的结构,一般情况下应该优先考虑组合。只有当下列条件满足时才考虑使用继承:

子类是一种特殊的类型,而不只是父类的一个角色
子类的实例不需要变成另一个类的对象
子类扩展,而不是覆盖或者使父类的功能失效
实例
分享到:
评论

相关推荐

    基于 Java 程序设计语言中一维数组的应用

    《Java 程序设计》语言是一种相对简单的面向对象的 编程语言,它丢弃了 C++ 中很难理解的运算符重载、多 重继承等概念。特别是 Java 语言使用引用代替指针,程 序设计者只需理解一些基本的概念,就可以用它编写出 ...

    JAVA程序设计教程

    第一章程序和程序设计 .......................................................................................................1 §1.1 什么是程序 ?........................................................

    JAVA 2平台安全技术-结构,API设计和实现

    本书为建立安全、有效、强大和可移植的Java应用程序和applet提供了重要的信息,对于致力于研究Java平台的专业人员是一本必不可少的参考书。 目目目录 前言 第1章 计算机与网络安全基础 1 1.1 密码学与计算机安全 1 ...

    Java 2平台安全技术-结构,API设计和实现

    1.3.2 仅仅使用外围防护的不足之处 4 1.4 访问控制与安全模型 4 1.4.1 MAC和DAC模型 5 1.4.2 对数据和信息的访问 5 1.4.3 静态和动态模型 6 1.4.4 关于使用安全模型的几点考虑 6 1.5 密码系统的使用 7 1.5.1 单向...

    Java优化编程(第2版)

    第1章 java程序设计风格 1.1 java文件名与文件组织结构 1.2 java文件注释头 1.3 包的声明与引用 1.4 类与接口的声明 1.5 java源文件编排格式 代码行长度与折行规则 1.6 程序注释 1.7 变量的声明初始化与放置 1.7.1 ...

    〖程序设计基础〗练习题2及答案

    1.Java 和 c++都是面向对象的程序设计语言。( ) 2.字符串 "\'a\'" 的长度是5。( ) 3. 同一个类中定义多个参数列表不同的同名方法,叫做方法的重载。( ) 4. 一个类的定义包括定义类头和定义类体两个部分。( ) 5.一个...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...

    BuildingSoftwareSystemHomeWorks:CENG431初步选举课程作业

    2-产品管理应用程序-详细信息在ProductManagementApp / CENG431_Midterm2_Project.pdf中:-复合设计模式-状态设计模式-GRASP原理-面向对象的分析和设计-面向对象的基础知识,抽象数据类型-继承,多态性,抽象类,...

    Scala程序设计(第2版)

    第23章 应用程序设计 435 23.1 回顾之前的内容 435 23.2 注解 437 23.3 Trait即模块 441 23.4 设计模式 442 23.4.1 构造型模式 443 23.4.2 结构型模式 443 23.4.3 行为型模式 444 23.5 ...

    java经典面试2010集锦100题(不看你后悔)

    C) 抽象类与接口的用法几乎都相同,具体用哪一个方法,只是在于程序设计人员的编程习惯而已。 D) 在Java中,最多使用的是抽象类,因为应用抽象类也可以实现多继承。而接口已经被限制使用。 题目21:d 程序如下: ...

    designpatterntuts:Java 教程的设计模式

    行为模式责任链命令互通者交互器调解员纪念观察员状态空对象战略模板游客 架构模式MVC 业务代表复合实体数据访问对象前端控制器拦截过滤器服务定位器传输对象 一些资源Java初学者设计模式维基Java 设计模式维基设计...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    Effective C++ 中文版

    当您读过《Effective C++中文版(第3版改善程序与设计的55个具体做法)》后,就获得了迅速提升自己C++功力的一个契机。  在国际上,本书所引起的反响,波及整个计算机技术出版领域,余音至今未绝。几乎在所有C++书籍...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    C .unchecked异常继承java.lang.RuntimeException类。 D .NullPointerException , IllegalArgumentException属于unchecked exception。 单选 23.关于Map类型集合的遍历方式,下列哪些说法是正确的:D A .Map...

    asp.net知识库

    ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...

    Head.First设计模式_PDF.part1

    书中的例子程序虽然都是用JaVa编写,但是本书所介绍的内容对于任何00语言的用户都适用,包括c++和c+。每一章都有数目不等的测验题。每章最后有一页要点整理,这也是精华所在,我都是利用这一页做复习。  《Head ...

    从J2SE到J2EE知识点介绍

    Swing程序设计 38 (一) Swing概述 38 1. 布局管理器 39 2. 流布局管理器 39 3. 边界布局管理器 41 4. 网格布局管理器 42 5. 盒式布局管理器 43 (二) 面板及组件 45 1. JPanel面板 45 2. 事件监听 48 (三) I/O输入...

Global site tag (gtag.js) - Google Analytics