import com.bruceeckel.simpletest.*;
import java.util.*;
class Villain {
private String name;
protected void set(String nm) { name = nm; }
public Villain(String name) { this.name = name; }
public String toString() {
return "I 'm a Villain and my name is " + name;
}
}
public class Orc extends Villain {
private static Test monitor = new Test();
private int orcNumber;
public Orc(String name, int orcNumber) {
super(name);
this.orcNumber = orcNumber;
}
public void change(String name, int orcNumber) {
set(name); // Available because it 's protected
this.orcNumber = orcNumber;
}
public String toString() {
return "Orc " + orcNumber + ": " + super.toString();
}
public static void main(String[] args) {
Orc orc = new Orc( "Limburger ", 12);
System.out.println(orc);
orc.change( "Bob ", 19);
System.out.println(orc);
monitor.expect(new String[] {
"Orc 12: I 'm a Villain and my name is Limburger ",
"Orc 19: I 'm a Villain and my name is Bob "
});
}
} ///:~
问题:
1. "Orc 12: I 'm a Villain and my name is Limburger "
"Orc 19: I 'm a Villain and my name is Bob "
这两个结果是怎么得到的?前一个 "Orc12: "更是不知怎样来的?
2.public String toString() {
return "Orc " + orcNumber + ": " + super.toString();
}
这个字符类型有什么作用?
------解决方案--------------------
System.out.println(orc);
因为orc是一个对象,println会自动调用orc的toString()方法.
下面是几个关键的方法.
public void println(Object x) {
synchronized (this) {
print(x);
newLine();
}
}
public void print(Object obj) {
write(String.valueOf(obj));
}
public static String valueOf(Object obj) {
return (obj == null) ? "null " : obj.toString();
}
------解决方案--------------------