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