class Mammal {
String name = "furry ";
String makeNoise() { return "generic noise"; }
}
class Zebra extends Mammal {
String name = "stripes ";
String makeNoise() { return "bray"; }
}
public class ZooKeeper {
public static void main(String[] args)
{ new ZooKeeper().go(); }
void go() {
Mammal m = new Zebra();
System.out.println(m.name + m.makeNoise());
}
}为什么运行结果是:
furry bray难道Zebra的name不会把Mammal的name重写了吗?如果能够推荐看什么参考书可以解决类似问题那就更好了!
String name = "furry ";
String makeNoise() { return "generic noise"; }
}
class Zebra extends Mammal {
String name = "stripes ";
String makeNoise() { return "bray"; }
}
public class ZooKeeper {
public static void main(String[] args)
{ new ZooKeeper().go(); }
void go() {
Mammal m = new Zebra();
System.out.println(m.name + m.makeNoise());
}
}为什么运行结果是:
furry bray难道Zebra的name不会把Mammal的name重写了吗?如果能够推荐看什么参考书可以解决类似问题那就更好了!
field 是【编译】时确定的
method是【运行】时确定的本人是这么理解的, 不知道对错m.name + m.makeNoise()
前者在编译的时候已经确定了 m 的类型,后者则是运行时