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();
}
}
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();
}
}
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()”里呢
Base()
Cleanser():Cleanser
ExplicitStatic()
Cleanser dilute() apply() Detergen.scrub() testStatic() scrub() foam()
%%%%%%%%%%%%%%%%%%%
Test base class:
Base()
Cleanser():Cleanser
Cleanser dilute() apply() scrub()
testStatic()
是x.print(); 打印出来,它打印的是s的值.
testStatic() 是super.testStatic(); 打印出来的。你并没有把它加入到s里面啊。
public void scrub() {
append(" Detergen.scrub()");
super.testStatic();
super.scrub();
}
的
super.testStatic(); 为什么没有在调用scrub 的时候执行呢
谁能说下 “testStatic()”为什么不再出现在“Cleanser dilute() apply() Detergen.scrub() scrub() foam()”里呢 按我的理解是 你是不是想说这句话?
打印Cleanser dilute() apply() scrub() 之前为什么没有打印testStatic(),是不是?
testStatic()方法你只在TestSuper 类中调用,并没在Cleanser 类调用,所以不是很显然吗?假如我没理解你的意思的话,能不能再说一遍?
你看看Cleanser类里面的testStatic()方法啊。
x.scrub(); 的执行打印出了"testStatic()",
x.print(); 的执行打印出了"Cleanser dilute() apply() Detergen.scrub() scrub() foam"
也就是Cleanser的成员s的内容.
append(" Detergen.scrub()");
super.testStatic();
上面这行在结果中为什么就没显示在Cleanser dilute() apply() Detergen.scrub() scrub() foam() 这里呢 super.scrub();
} 为什么不顺序执行呢?
而super.testStatic();又没有给s += testStatic();这个方法只是打印出"testStatic()"啊.
看到了关键的地方:因为你都没有出现过
append("testStatic()")字样.
所以你不可能在字符串里找到"testStatic()"字样