调用超类的方法

时间:2014-12-09 15:07:48

标签: java subclass superclass

该程序应该单独调用每个子类的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

2 个答案:

答案 0 :(得分:6)

funFact是静态的。覆盖不适用于静态方法。

从您的所有方法中删除static关键字(正如您通过实例引用调用它们一样),它将按预期工作。

答案 1 :(得分:2)

如果你“覆盖”静态方法,你隐藏方法,而不是真正重写。

请阅读:

https://docs.oracle.com/javase/tutorial/java/IandI/override.html

“静态方法”部分准确回答了您的问题。