java中的继承问题(thinking in java中的习题),新手求解!!!

class Cleanser
{

private String s="Cleanser";
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);
}    

}

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);
    }

}
public class SeventhExercise2 extends Detergent
{

public void scrub()
{
    
    append("This is my scrub()");
    super.scrub();
}
public void sterilize()
{
    System.out.println("This is my new function:sterilize()");
}

public static void main(String args[])
{
    SeventhExercise2 se2=new SeventhExercise2();
    se2.scrub();
    se2.sterilize();
    Detergent.main(args);
}

}

/这是thinking in java第四版上第129页练习2的题,我对基类的子类又一次进行继承后,出现了一些问题:/

clipboard.png
孙子类的这个方法输出不正确,这句话没有加到s中,最后输出为

clipboard.png
我用eclipse逐步调试发现,从孙子类的scrub函数出来之前,这个字符串this is my scrub()已经加入进去了,但是从这个函数出来之后,这个s就被清空了,成了空的,百思不得其解啊,望大神解答,我是个java新手,谢谢啦!!!

阅读 2.2k
1 个回答

你通过Detergent.main(args);又创建了一个新的Cleanser对象,你输出的是这个新对象的s,当然没有那个字符串喽

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题