java中的类都是围绕着类进行的。可以通过创建新类来复用代码,而不必从头编写。可以使用别人已经开发并调试好的类。此方法使用的窍门在于使用类而不破坏现有的程序代码。达到这一目的的方法有两种:

第一种方法非常直观:在新类中创建现有类的对象,通过现有类的对象调用其中的成员,来达到复用代码的目的。由于新类是由现有类的对象所组成的,所以这种方式称为组合。该方式只是复用了现有程序的代码,而并非它的形式。

第二种方法则更细致一些,它按照现有类的类型来创建新类。在新类中无需改变现自己的形式,而是采用现有类的形式并在其中添加代码。这种方式称为继承,而且编译器可以完成大部分工作。继承是面向对象程序设计的基石之一。

组合和继承之间的选择:

组合和继承都允许在新类中放置子对象,组合是显式的这样做,而继承则是隐式的这样做。二者之间的区别何在,以及怎样选择呢?

组合技术通常用于想在新类中使用现有类的功能而非它的接口的形式。即,在新类中嵌入某个对象,让其实现所需要的功能,但新类用户看到的只是为新类所定义的接口,而非嵌入对象的接口。为取得此效果,需要在新类中嵌入一个现有类的private对象。

有时,也许类的用户直接访问类的组成部分是极具意义的;也就是说,将成员对象声明为public。如果成员对象自身都隐藏了具体的实现,那么这样做是安全的。当用户能够了解到你正在组装一组部件时,会使得端口更加易于理解。car对象即为一个很好的例子:

//发动机

class Engine {

public void start(){}

public void stop(){}

}

//车轮

class Wheel {

public void start(){}

public void stop(){}

}

//车门

class Door {

public void open(){}

public void close(){}

}

class Car {

Engine engine=new Engine();

Wheel [] wheel =new Wheel [4];

Door[] door=new Door[4];

pulbic void run(){

//具体实现

}

}       上面的例子只是我们分析问题的一部分,不是具体的底层实现,所以我们使Car中的成员声明为public,这将有助于客户端程序员了解怎样去使用类,而且也降低了类开发者所面临的代码复杂度。但务必要记住,这仅仅只是一个特例,一般情况下应该使域成为private。

在继承的时候,使用某个现有类,并开发出它的一个特殊版本。通常,这意味着你在使用一个通用类,并为了某种特殊需要而将其特殊化。略微思考一下就会发现,用一个"交通工具"对象去构成一部"车子"是毫无意义的,因为"车子"不包括"交通工具","车子"仅仅是"交通工具"的一种(is-a)。is-a(是一个)用来表示继承关系,而has-a(有一个)用来表示组合关系。

在面向对象中编程中,生成和使用程序代码最有可能采用的方法就是直接将数据和方法包装进一个类中,并使用该类的对像。也可以使用组合技术使用现有类来开发新的类。而继承技术其实是不太常用的。尽管我们在学习OOP的过程中多次强调继承,但这不意味着要尽可能的使用它。相反,应当谨慎使用这一技术,使其使用场合仅限于你确信该使用这一技术的情况下。那到底该使用组合还是继承?一个最清晰的判断方法就是问一问你自己是否要从新类型向基类向上转型。需要的话继承则是必须的,如果不需那应当好好考虑是否使用继承。

java 中组合与复用_Java 代码复用(组合与继承)相关推荐

  1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序

    1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...

  2. java中怎么实现指数幂,java中幂指数值的运算代码解析

    说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...

  3. java怎么计算幂函数,java中幂指数值的运算代码解析

    说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...

  4. java中反复使用代码_Java代码复用规则

    Java代码复用规则 要尽量避免在代码中出现判断语句,来测试一个对象是否某个特定类的实例.通常,如果你需要这么做,那么,重新设计可能会有所帮助.我在工作中遇到这样的一个问题:我们在使用JAVA做XML ...

  5. java中字符串分割器_java简易文本分割器实现代码

    本文实例为大家分享了java文本分割器的具体代码,供大家参考,具体内容如下 import java.io.*; class cutintopieces{ public static void main ...

  6. java中怎么判断一段代码时线程安全还是非线程安全_Java 中的多线程你只要看这一篇就够了...

    引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...

  7. java中math的方法_Java中Math类常用方法代码详解

    近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...

  8. java中if条件格式_Java 设置Excel条件格式示例代码(高亮条件值、应用

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...

  9. java中取系统时间_JAVA中获取当前系统时间(示例代码)

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...

最新文章

  1. Codeforces 1009D:Relatively Prime Graph
  2. FisherFace 进行人脸分裂
  3. 优化MySQL数据类型——《深究MySQL》
  4. VTK:Qt之BarChartQt
  5. 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上...
  6. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)...
  7. 18 WM配置-策略-激活仓位类型搜索(Bin Type Search)
  8. 《Scikit-Learn与TensorFlow机器学习实用指南》第8章 降维
  9. java九九乘法表右上三角_输出九九乘法表
  10. 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优
  11. ubuntu xampp进入mysql安全模式
  12. Python 实现数据分析中的 帕累托、漏斗、RFM、雷达图
  13. JavaFX战旗类游戏开发 第一课 概述
  14. 佛山市住房公积金数据异地容灾备份系统
  15. 【Idea】Refactor
  16. 科达视频系统设置服务器,科达KDV-VS视频录像点播系统用户手册.doc
  17. Android项目,library中根据资源id获取资源
  18. MATLAB显示剪切板不可用,电脑剪切板不能正常启动或者使用。
  19. python进行股票收益率计算和风险控制的实现
  20. nginx配置赛门铁克ssl

热门文章

  1. 基于VC的OPC客户端软件研究与实现
  2. 【Hibernate】HibernateCallback总结
  3. hexo部署至FTP-COS
  4. P2082 区间覆盖(加强版)
  5. php通用的树型类创建无限级树型菜单
  6. 字符串中最后一个词组的长度 Length of Last Word
  7. 《科学+ 预见人工智能》——物理学家的管理方式
  8. apt-get安装错误积累
  9. Java 字符的验证
  10. 【基础】华为设备默认路由和静态路由配置实战