7:合成的语法

  考虑以下代码:

 1 //: SprinklerSystem.java //
 2 class WaterSource {
 3     private String s;
 4     WaterSource() {
 5         System.out.println("WaterSource()");
 6         s = new String("Constructed");
 7         }
 8     public String toString() { return s; }
 9     }
10 public class SprinklerSystem {
11     private String valve1, valve2, valve3, valve4;
12     WaterSource source;
13     int i;
14     float f;
15     void print() {
16         System.out.println("valve1 = " + valve1);
17         System.out.println("valve2 = " + valve2);
18         System.out.println("valve3 = " + valve3);
19         System.out.println("valve4 = " + valve4);
20         System.out.println("i = " + i);
21         System.out.println("f = " + f);
22         System.out.println("source = " + source);
23 } public static void main(String[] args) {
24     SprinklerSystem x = new SprinklerSystem();
25     x.print();
26 }
27 } ///:~

    WaterSource类中的toString方法为我们设置的,但是如果去掉这个方法,输出结果也不会有任何改变。这是因为所有的非基本类型的对象均会有一个toString的方法,每当我们想要一个String类型,却获得非此类型的对象,编译器便会调用这种方法。

    各种实验:1:如果我们将12行改为WaterSource source = new WaterSource();那么运行结果便是:source=Constructed;这是因为当我们new source类的时候,构建器WaterSource中的语句便会执行一次,此时将变量s设置为Constructed,故调用source方法的时候,返回的便是当前s的值。

         2:如果我们去掉toString方法并new source的时候,此时会结果会是类似[email protected]的一行,这个结果是显示source类在内存中的地址。

  

时间: 2024-08-14 16:24:45

7:合成的语法的相关文章

swift 语法总结

原文:http://www.cocoachina.com/newbie/basic/2014/0612/8803.html 语句 语句语法 statement → expression ; opt statement → declaration ; opt statement → loop-statement ; opt statement → branch-statement ; opt statement → labeled-statement statement → control-tra

类再生

Thinking in Java 第六章 类再生 有两个实现类再生的方法: 第一个最简单:在新类里简单地创建原有类的对象.我们把这种方法叫作"合成",因为新类由现有       类的对象合并而成.我们只是简单地重复利用代码的功能,而不是采用它的形式. 第二种方法则显得稍微有些技巧.它创建一个新类,将其作为现有类的一个"类型".我们可以          原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响.这种魔术般          的行为叫作&q

8.JAVA编程思想类再生

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040239 "Java 引人注目的一项特性是代码的重复使用或者再生.但最具革命意义的是,除代码的复制和修改以外,我们还能做多得多的其他事情." 在象C 那样的程序化语言里,代码的重复使用早已可行,但效果不是特别显著.与Java 的其他地方一样,这个方案解决的也是与类有关的问题.我们通过创建新类来重复使用代码,但却用不着重新创建,可以直接使用别人已建好并调试好的现成

侃侃Thinking In Java

我是从Bruce Eckel的网站开始,读Thinking In Java 1st edition的,那是2000年左右.实话实说,对于TIJ,我又喜欢又讨厌它. 又喜欢又讨厌 正如大多数同学所感觉的,TIJ偏重于介绍面向对象的"思想",而不是像绝大多数(国内的)<Xxx程序设计>之类的书籍,前者是思想流派,后者是语法流.这点很吸引我,而且,这也是我写<编程导论(Java)>时学习的地方. 但,我并没有完整地读完TIJ,因为 我不喜欢他的讲述方式.Bruce E

讯飞语音SDK Android平台使用

1. 支持功能介绍: 2. Android API主要业务接口和流程介绍 -------------------------------------------------------- 工程代码: -------------------------------------------------------- 准备工作: 在 讯飞开放平台(http://www.xfyun.cn/)注册,下载Android版 SDK   1. 支持功能介绍: (1). 听写,语法文件识别,语义 (2). 文字合

读TIJ -6 类再生

<Think in java·第 6 章类再生> 读TIJ -1 对象入门 中已经就代码复用性吐槽了.继承关系在结果上(不是为了代码复用而设计继承关系)为代码复用提供了新的途径. 本章看其目录就比较杂,程序员的内聚思想去哪儿了?合成复用优先--合成.继承,为什么实现继承是不好的-- 6.1 合成的语法 解释了一个例程,没有什么好说的.has_a关系. 6.2 继承的语法 [You can think of inheritance, then, as reusing the class.]Is_

pb 动态改变DW的WHERE子句

PB心得4-动态改变DW的WHERE子句 在DW的FILTER的使用一文中提到如果检索条件因素不固定的话,可以使用动态改变DW的WHERE子句的方法. 这个方法的实现是这样的,做一个没有参数的DW,在程序中,先通过DW.OBJECT.DATAWINDOW.TABLE.SELECT来取得DW对象的SQL语法,可以对SQL语法拆分出SELECT部分,WHRER部分,GROUP BY部分,HAVING部分.如果是UNION ALL 那么应该需要用数组变量来接收对应的部分,这些变量最好是用环境变量. 再

关于get、set方法以及点语法的使用

首先写一个简单的get,set方法来熟悉它的作用 //Fraction.h @interface Fraction:NSObject -(void)setNumber:(int) n; -(int)getNumber; //Fraction.m #import Fraction.h @implementation Fraction { int number; } -(void)setNumber:(int)n;{ number = n; } -(int)getNumber{ return num

创建对象,初始化对象属性,给节点分派一个合成事件

XML DOM createEvent() 方法 Document 对象参考手册 定义和用法 createEvent() 方法创建新的 Event 对象. 语法: createEvent(eventType) 参数 描述 eventType 想获取的 Event 对象的事件模块名. 关于有效的事件类型列表,请参阅“说明”部分. 返回值 返回新创建的 Event 对象,具有指定的类型. 抛出 如果实现支持需要的事件类型,该方法将抛出代码为 NOT_SUPPORTED_ERR 的 DOMExcept