class  Cleanser
{
private String s=new String("Cleaner");
public void append(String a)
{s+=a;}
public void dilute(){append("dilute()");}
public void apply(){append("apply()");}
public void scrub(){append("scrub()");}
public String toString(){return s;}
public static void main(String [] args){
Cleanser x=new Cleanser();
x.dilute();
x.apply();
x.scrub();
System.out.println(x);
}
}
public class Detergent extends Cleanser
{
public void scrub(){
append("Detergent.scrub()");
super.scrub();
}
public void foam(){
append("foam()");
}
public static void main(String[] args){
Detergent x=new Detergent();
x.dilute();
x.apply();
x.scrub();
x.foam();
System.out.println(x);
System.out.println("Testing base class:");
        Cleanser.main(args);
}
}
输出是Cleanerdilute()apply()Detergent.scrub()scrub()foam()
Testing base class:
Cleanerdilute()apply()scrub()我就是不明白有System.out.println(x);
这样一条命令,为什么不会输出s的直呢??请各位高手帮忙,提前道谢!!因为小弟没分了,还请各位谅解!!下次加倍补偿!

解决方案 »

  1.   

    所有的输出都是s的值啊- -开始s = "Cleaner".后来你不停的操作,加入了很多值到s里。变成了:Cleanerdilute()apply()Detergent.scrub()scrub()foam() 后面的都是你加的。
      

  2.   


    System.out.println(x)输出时默认会调用x的toString()方法,因为你重载了toString()方法,所以
    System.out.println(x)就调用了x的toString()方法,所以会输出s 的值。
      

  3.   

    谢谢楼上两位的帮助 .
    弄明白了 我搞错了append()的用法,我以为它会连接字符串后还会将字符串输出呢!!