class Animal {
public static void saySomething() { System.out.print(" Gurrr!");
}
}
class Cow extends Animal {
public static void saySomething() {
System.out.print(" Moo!");
}
public static void main(String [] args) {
Animal [] animals = {new Animal(), new Cow()};
for(Animal a : animals) {
a.saySomething();
}
new Cow().saySomething();
}
}
输出是:
Gurrr! Gurrr! Moo!
示例2:
class Animal {
public void saySomething() { System.out.print(" Gurrr!");
}
}
class Cow extends Animal {
public void saySomething() {
System.out.print(" Moo!");
}
public static void main(String [] args) {
Animal [] animals = {new Animal(), new Cow()};
for(Animal a : animals) {
a.saySomething();
}
new Cow().saySomething();
}
}
输出:
Gurrr! Moo! Moo!
我只是不明白为什么做saySomething非统计ic导致第二次调用saySomething调用Cow版本而不是Animal版本。我的理解是Gurrr! Moo! Moo!
是两种情况下的输出。
“Java语言规范说得那么简单”实际上就是这样。为什么你被允许从一个实例引用中调用一个静态方法,就像真正的奇怪一样。但是至少有一个巨大的社区维基线程:) – Affe 2010-09-09 19:55:32