class Base {
Base() {
System.out.println("Base()");
} public void scrub() {
System.out.println(" Base.scrub()");
}
}class Cleanser extends Base {
private String s = new String("Cleanser"); public void append(String a) {
s += a;
} public void dilute() {
append(" dilute()");
} public void apply() {
append(" apply()");
} public void scrub() {
append(" scrub()");
} public void print() {
System.out.println(s);
} Cleanser() {
System.out.println("Cleanser():" + s);
} public static void testStatic() {
System.out.println("testStatic()");
} public static void main(String [] args) {
Cleanser x = new Cleanser();
x.dilute();
x.apply();
x.scrub();
x.print();
}
}public class TestSuper extends Cleanser {
TestSuper() {
System.out.println("ExplicitStatic()");
} public void scrub() {
append(" Detergen.scrub()");
super.testStatic();
                super.scrub();
} public void foam() {
append(" foam()");
} public static void main(String[] args) {
TestSuper x = new TestSuper();

x.dilute();
x.apply();
x.scrub();
x.foam();
x.print();
System.out.println("%%%%%%%%%%%%%%%%%%%");
System.out.println("Test base class:");
Cleanser.main(args);
testStatic();
}
}

解决方案 »

  1.   

    输出结果是:
    Base()
    Cleanser():Cleanser
    ExplicitStatic()
    testStatic()
    Cleanser dilute() apply() Detergen.scrub() scrub() foam()
    %%%%%%%%%%%%%%%%%%%
    Test base class:
    Base()
    Cleanser():Cleanser
    Cleanser dilute() apply() scrub()
    testStatic()
    谁能说下  “testStatic()”为什么不再出现在“Cleanser dilute() apply() Detergen.scrub() scrub() foam()”里呢 
      

  2.   

    我人为的输出结果应该是:
    Base() 
    Cleanser():Cleanser 
    ExplicitStatic()  
    Cleanser dilute() apply() Detergen.scrub() testStatic() scrub() foam() 
    %%%%%%%%%%%%%%%%%%% 
    Test base class: 
    Base() 
    Cleanser():Cleanser 
    Cleanser dilute() apply() scrub() 
    testStatic() 
      

  3.   

    Cleanser dilute() apply() Detergen.scrub() scrub() foam()
    是x.print(); 打印出来,它打印的是s的值.
    testStatic() 是super.testStatic(); 打印出来的。你并没有把它加入到s里面啊。
      

  4.   

    可是这个方法中
    public void scrub() { 
           append(" Detergen.scrub()"); 
           super.testStatic(); 
           super.scrub(); 
    }
     的
    super.testStatic();  为什么没有在调用scrub 的时候执行呢 
      

  5.   

    你这句话是什么意思?
    谁能说下  “testStatic()”为什么不再出现在“Cleanser dilute() apply() Detergen.scrub() scrub() foam()”里呢  按我的理解是 你是不是想说这句话?
    打印Cleanser dilute() apply() scrub() 之前为什么没有打印testStatic(),是不是?
    testStatic()方法你只在TestSuper 类中调用,并没在Cleanser 类调用,所以不是很显然吗?假如我没理解你的意思的话,能不能再说一遍?
      

  6.   

    正因为它执行了啊,所以打印出testStatic()这句啊。
    你看看Cleanser类里面的testStatic()方法啊。
    x.scrub(); 的执行打印出了"testStatic()",
    x.print(); 的执行打印出了"Cleanser dilute() apply() Detergen.scrub() scrub() foam"
    也就是Cleanser的成员s的内容.
      

  7.   

    可是调用public void scrub() { 
        append(" Detergen.scrub()"); 
        super.testStatic();      
        上面这行在结果中为什么就没显示在Cleanser dilute() apply() Detergen.scrub() scrub() foam()  这里呢    super.scrub(); 
    } 为什么不顺序执行呢?
      

  8.   

    晕,不是都说过了,"Cleanser dilute() apply() Detergen.scrub() scrub() foam() "这个字符串是 Cleanser里面的成员s的值.
    而super.testStatic();又没有给s += testStatic();这个方法只是打印出"testStatic()"啊.
      

  9.   


    看到了关键的地方:因为你都没有出现过
    append("testStatic()")字样.
    所以你不可能在字符串里找到"testStatic()"字样