复用代码是Java众多引人注目的功能之一。但是要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。

上述方法常为C这类过程型语言所使用,但收效并不是很好。正如Java中所有事物一样,问题解决都是围绕类展开的。可以通过创建新类来复用代码,而不必再从头开始编写。可以使用别人业已开发并调试好的类。

此方法的窍门在于使用类而不破坏现有程序代码。读者将会在接下来的文章中看到两种达到这一目的的方法。第一种方法非常直观,只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。(本文便是对这种组合方法的解析)

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

就组合和继承而言,其语法和行为大多是相似的。由于它们是利用现有类型生成新类型,所以这样做极富意义。在接下来的两节中,读者将会了解到这两种代码重用机制。

示例源码

其实在我们日常的程序编写中我们会经常用到组合技术,只是我们没有留意而已。只需将对象引用置于新类中即可。例如,假设你需要某个对象,它要具有多个String对象、几个基本类型数据,以及另一个类的对象。对于非基本类型的对象,必须将其引用置于新的类中,但可以直接定义基本类型数据:

package com.mufeng.theseventhchapter;

public class WaterSource {

private String s;

public WaterSource() {

System.out.println("WaterSource()");

s = "Constructed";

}

@Override

public String toString() {

return s;

}

}

package com.mufeng.theseventhchapter;

public class SprinklerSystem {

private String valve1, valve2, valve3, valve4;

private WaterSource source = new WaterSource();

private int i;

private float f;

@Override

public String toString() {

return "valve1=" + valve1 + " valve2=" + valve2 + " valve3=" + valve3

+ " valve4=" + valve4 + "\n" + "i=" + i + " f=" + f + "\n"

+ "source=" + source;

}

public static void main(String[] args) {

SprinklerSystem sprinklerSystem = new SprinklerSystem();

System.out.println(sprinklerSystem);

}

}

输出结果

WaterSource()

valve1=null valve2=null valve3=null valve4=null

i=0 f=0.0

source=Constructed

源码解析

在上面两个类所定义的方法中,有一个很特殊:toString()。每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法便会被调用。所以在SprinklerSystem.toString()的表达式中:

"source=" + source编辑器将会得知你想要将一个String对象("source=")同WaterSource相加。由于只能将一个String对象和另一个String对象相加,因此编译器会告诉你:“我将调用toString(),把source转换成为一个String!”这样做之后,它就能够将两个String连接到一起并将结果传递给System.out.println()。每当想要使所创建的类具备这样的行为时,仅需要编写一个toString()方法即可。

java组合语法_JAVA复用类之组合语法的使用(附源码)相关推荐

  1. java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码、数据库)

    java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行 ...

  2. JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)

    JAVA计算机毕业设计腾讯网游辅助小助手(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

  3. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  4. java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码、数据库)

    java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm ...

  5. JAVA计算机毕业设计林家餐厅自助点餐管理系统(附源码、数据库)

    JAVA计算机毕业设计林家餐厅自助点餐管理系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  6. Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  7. JAVA计算机毕业设计甜趣网上蛋糕店订购系统(附源码、数据库)

    JAVA计算机毕业设计甜趣网上蛋糕店订购系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

  8. java计算机毕业设计ssm智慧小区团购系统4x45g(附源码、数据库)

    java计算机毕业设计ssm智慧小区团购系统4x45g(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  9. java计算机毕业设计BS景区票务管理系统设计与实现(附源码、数据库)

    java计算机毕业设计BS景区票务管理系统设计与实现(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ E ...

最新文章

  1. leetcode算法题--二叉搜索树的最近公共祖先
  2. .net core image怎么保存_轻量级Vue图片上传插件——Vue-core-image-Upload
  3. C++语言基础 例程 派生类的声明与构成
  4. Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口
  5. vue项目中出现cannot get/的解决办法
  6. python音乐制作_Python实现音乐的剪辑
  7. Netbean控制台程序中文输出乱码解决方案
  8. MySQL的多表操作
  9. 解决XML转JSON串时报错:Exception in thread main java.lang.NoClassDefFoundError: nu/xom/Serializer
  10. Go语言查缺补漏ing Day1
  11. Java 8 新特性|Collectors.joining()
  12. 切换到/etc/ppp/ipup文件,写出操作命令过程,并显示详细过程,和推迟30秒关机命令
  13. HTML+CSS之背景图片的设置
  14. [android开发]Animation动画的实现
  15. 分布式事务框架lcn入门demo
  16. 利用SDL绘制点阵字
  17. Latex 设置页眉与正文顶部距离
  18. 关于MUR1100ERLG
  19. 为什么VDI对核心UNIX®和Linux®工程应用有意义
  20. Dashy: 一款功能超强大,颜值爆表的可定制专属导航页工具

热门文章

  1. java file用法_Java File 类的使用方法详解(转)
  2. vs code使用问题
  3. 【BZOJ2539】【codevs1221】丘比特的烦恼,trie树+几何判断+费用流
  4. 【BZOJ4247】挂饰,又一个奇特的背包
  5. 2017.10.28 管道取珠 失败总结
  6. java 形参 实参_java 形参是父类实参是子类的问题
  7. 【英语学习】【WOTD】valetudinarian 释义/词源/示例
  8. 【英语学习】【Daily English】U13 Holiday L01 I have been waiting for it for ages!
  9. 三维旋转四元数系列(4.四元数三维旋转表达)
  10. Mybatis系列全解(六):Mybatis最硬核的API你知道几个?