`
李灵晖-raylee
  • 浏览: 135751 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-6.4 如何在聚合与继承之间选择

 
阅读更多

这一章节我们来聊一下在聚合与继承之间选择的问题。

在我们平常的编码里面,使用聚合或者继承都可以,或者两者可以混合使用也行,这个时候就需要做出抉择,因为代码以后还需要维护,怎么才能达到维护简单?代码可读?。。。

因此,我们必须在各种方案中做出抉择。

笔者是这样认为的:

如果新的类只是使用老的类的一部分功能,那么就是用聚合,直接new出来就可以了,满足need或者组合这个关系;

如果新的类必须是老的类的一个特殊例子,那么就是用继承,满足is-a或者is-like-a这种关系

例子:

车是交通工具。

代码:

/**
 * 
 */
package com.ray.ch05;

/**
 * @Package:com.ray.ch05
 * 
 * @TODO 测试
 * 
 * @date 2015 10 30
 * 
 * @time 11:42:19
 * 
 * @author JMSCADMIN
 * 
 * @version 1.0
 */
public class Test {

}

class Vehicle {
}

class Car extends Vehicle {
}

class BMW extends Car {
}

车满足is-a交通工具这个关系,BMW满足is-a车这种关系


车是由轮子、车门等组合成的。

/**
 * 
 */
package com.ray.ch05;

/**
 * @Package:com.ray.ch05
 * 
 * @TODO 测试
 * 
 * @date 2015 10 30
 * 
 * @time 11:42:19
 * 
 * @author JMSCADMIN
 * 
 * @version 1.0
 */
public class Test {

}

class Door {
}

class Wheel {
}

class Car {
	private Door leftDoor;
	private Door rightDoor;
	private Wheel leftForwardWheel;
	private Wheel leftBackwardWheel;
	private Wheel rightForwardWheel;
	private Wheel rightBackwardWheel;

}

车和轮子、门等满足车是由xxx组成的这种关系。


总结:这一章节简单讨论了如何在聚合与继承之间选择。



这一章节就到这里,谢谢。

-----------------------------------

目录


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    eclipse-java-2021-12-R-win32-x86_64.zip

    用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...

    lfsbook-6.4

    LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    在标签中,“ntrip__java实现”表明这个客户端是用Java编程语言编写的,这是Android应用开发的常见选择,因为Java与Android SDK兼容性良好。“ntrip_android_client”和“ntrip_client”则明确了这是一个面向Android...

    aip-java-sdk-4.2.0

    标签 "aip sdk" 进一步确认了这是一个与百度AIP相关的SDK,通常这样的SDK会提供一系列预先封装好的接口,使得开发者可以快速地在自己的项目中集成AI功能,而无需从头开始编写复杂的算法和模型。 在压缩包的文件名称...

    aspose-words-java-23.6-jdk17.jar.zip

    【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。在...

    java-Swing外观包

    Java提供了两种内置的LookAndFeel:Metal(默认的Java Look and Feel)和SystemLookAndFeel,后者可以使Swing组件看起来与宿主操作系统(如Windows、Mac OS X或Linux)的原生控件一致。此外,开发者还可以自定义Look...

    Java---笔试题大全

    Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...

    java-多文件上传dome

    在Java编程中,多文件上传是一项常见的功能,特别是在web应用中,用户可能需要上传多个文件,如图片、文档等。本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 ...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时。在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是...

    curso-java-pildorasInf:从头开始学习Java

    通过这个课程,你将从安装Java开发环境(如JDK)开始,逐步学习Java语法、类与对象、封装、继承、多态等核心概念。此外,你还将接触到控制流(条件语句、循环)、异常处理、文件操作、集合框架、IO流、多线程、网络...

    java-lib

    "java-lib"是一个与Java编程相关的资源集合,很可能包含了各种常用的Java库,这些库可以帮助开发者在进行Java开发时提高效率,解决特定问题。"java-all-lib"的标签可能表示这个压缩包包含了广泛的Java库,涵盖了多种...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...

    java-pdf&word-jar.zip

    在IT行业中,处理PDF和Word文档是常见的任务,特别是在企业级应用中,这些格式的文档广泛用于报告、合同和各种数据交换。...在实际开发中,根据项目的具体需求选择合适的库,能极大地提高开发效率和代码质量。

    Free Spire.Doc for Java - 3.9 无水印

    `Free Spire.Doc for Java` 是一款专为Java开发者设计的文档处理库,它允许用户在Java应用程序中创建、编辑和转换Microsoft Word文档。这个3.9版本提供的是无水印版本,意味着开发者可以免费试用并用于商业项目,而...

    ks-java-lib:包含 Java 的 KS 库

    【标签】"Java" 表明这个库是专门为 Java 语言设计的,与 Java 语法兼容,并且可以在 Java 虚拟机(JVM)上运行。这意味着它可能使用了 Java 核心库中的接口和类,并且遵循了 Java 的编程规范。对于 Java 开发者来说...

Global site tag (gtag.js) - Google Analytics