该程序应该单独调用每个子类的funFact
,而是仅从funFact
类调用Mammal
方法。我究竟做错了什么?
public class MammalFacts{
public static class Mammal{
public static String funFact(){
return "If you are reading this, there's a 70% chance you're a mammal";
}//end funFact
}//end mammal
public static class Primate extends Mammal{
public static String funFact(){
return "All primates can fly";
}
}//end Primate
public static class Monkey extends Primate{
public static String funFact(){
return "Monkies will rule the earth someday";
}
}
public static void main(String[]args){
Mammal[]i = new Mammal[3];
i[0] = new Mammal();
i[1] = new Primate();
i[2] = new Monkey();
for(int c = 0; c < i.length; c++){
System.out.println(i[c].funFact());
}
}//end of main
}//end MammalFacts
答案 0 :(得分:6)
funFact
是静态的。覆盖不适用于静态方法。
从您的所有方法中删除static
关键字(正如您通过实例引用调用它们一样),它将按预期工作。
答案 1 :(得分:2)
如果你“覆盖”静态方法,你隐藏方法,而不是真正重写。
请阅读:
https://docs.oracle.com/javase/tutorial/java/IandI/override.html
“静态方法”部分准确回答了您的问题。