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

查看:113
本文介绍了thinking-in-java-小记 - 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的题,我对基类的子类又一次进行继承后,出现了一些问题:/


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


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

解决方案

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

这篇关于thinking-in-java-小记 - java中的继承问题(thinking in java中的习题),新手求解!!!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆