对Thinking in Java中解释的 toString()方法自动调用的疑惑

MZDu 2005-10-21 10:32:55
在第六章重用类中,看到程序如下:
class Soap{
private String s;
Soap(){
System.out.println("Soap()");
s = new String("Constructed");
}
public String toString(){
System.out.println("this is father's toString");//我增加的输出
return s;}
}
public class Bath {
private String
s1 = new String("Happy"),
s2 = "Happy2",
s3,s4;
private Soap castille;
private int i;
private float toy;
public Bath(){
System.out.println("Inside Bath()");
s3 = new String("toy");
i = 47;toy =3.14f;
castille = new Soap();
}
public String toString(){
if(s4 == null)
s4 = new String("Joy");
return
"s1 = " + s1 + "\n" +
"s2 = " + s2 + "\n" +
"s3 = " + s3 + "\n" +
"s4 = " + s4 + "\n" +
"i = " + i + "\n" +
"toy = " + toy + "\n" +
"castille = " + castille;
}
public static void main(String[] args){
Bath b = new Bath();
System.out.println(b);
}
}
文中解释到:“每一个基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法就会被调用”
问题:主方法中输出b对象,当然会自动调用子类的toString()方法,可是为什么父类的toString()方法也会被自动调用并输出。
根据我的了解,确实在程序执行时,子类会自动调用父类的构造方法,对父类的成员变量进行初始化和存储空间的分配,可是也没有理由调用toString()方法啊,更没有像主方法那样的输出类对象,自动执行toString()方法的机会。
...全文
240 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
homesos 2005-10-21
  • 打赏
  • 举报
回复
建议先学C++……

C++中对这些问题说的很明白,道理都是一样的。
lingkeylbh 2005-10-21
  • 打赏
  • 举报
回复
楼主这根本不是什么父类和子类的问题啊,你的Bath又没有继承Soap,
只是Bath类域中有一个是Soap类型,它用toString当然用自己类的啊
gogon 2005-10-21
  • 打赏
  • 举报
回复
对,System.out.println(obj)和 "dddd"+obj
这两个地方java都会做自动类型转换。也就是通过调用它的toString()函数,转换成String
believefym 2005-10-21
  • 打赏
  • 举报
回复
因为你子类的toString方法return的时候有+castille,这里有字符串的连接,会调用castille的toString,就是父类的toString方法了
MZDu 2005-10-21
  • 打赏
  • 举报
回复
晕菜
说错了,没有继承,哈哈!

是成员变量初始化的问题
对不起大家了
这几天忙着处对象,晕了头了,下次一定注意

不过我想要的答案已经有了
谢谢大家

不知道大家还有没有什么想说的。
这个贴子两天后结,再次感谢!
yanxiazhiqiu 2005-10-21
  • 打赏
  • 举报
回复
晕菜了,哪有继承?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧