南京到大连机票多少钱:关于java中的隐式调用问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 22:38:50
我简单的说一下这个是《java实例技术手册》中的一个例子。
首先有一个类Rect.java,其中有很多的方法和实例变量,但和我提的问题没关系,就不写了,其中有一个段
public class Rect
{
public int x1, y1, x2, y2;
public Rect(int x1, int y1, int x2, int y2 )
{
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public String toString()
{
return "[" + x1 + "," + y1 + ";" + x2 + "," + y2 + "]";
}
上面有一段注释:说是覆盖了超类Object的方法,

然后有一个RectTest.java
public class RectTest
{
public static void main(String[] args)
{
Rect r1 = new Rect(1, 1, 4, 4);
Rect r2 = new Rect(2, 3, 5, 6);
System.out.println(r1 + "union" + r2 + " = " + u);
System.out.println(r1 + "intersection" + r2 + " = " + i);
}
}

对于它最后两个println中的r1,r2它提到是隐式的调用Rect.toString方法,我就是对这个调用不理解,也查不到相关的资料,请指点。

这是因为System.out.println这个方法可以打印出任何对象或者数据类型的关系

他可以打印出8种基本类型和对象,基本类型就不说了,如果他发现参数为对象的话,会自动调用该对象的toString()方法进行打印,这也就是所谓的隐士调用了。

你的R1,R2是对象,所以他会选择该对象中的toString()方法,然后打印,toString()是由Object类派生的,所以任何对象都拥有这个方法

println 会把传入的参数转化成String
因为在Java中任何东西都是对象,而每个对象都有一个toString方法,继承自java.lang.Object
所以把每个对象转化成String就会调用对象的toString方法.