【问题标题】:Calling methods of super-classes调用超类的方法
【发布时间】:2014-12-09 15:07:47
【问题描述】:

这个程序应该单独调用每个子类的funFact,但它只从Mammal 类调用funFact 方法。我究竟做错了什么?

 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

【问题讨论】:

标签: java subclass superclass


【解决方案1】:

funFact 是静态的。覆盖对静态方法不起作用。

从您的所有方法中删除 static 关键字(因为无论如何您都是通过实例引用调用它们),它将按您的预期工作。

【讨论】:

    【解决方案2】:

    如果您“覆盖”静态方法,您是在隐藏该方法,而不是真正覆盖。

    阅读:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2012-12-30
      • 2015-04-20
      • 2021-11-10
      • 1970-01-01
      • 2011-10-24
      • 2012-09-02
      • 2014-01-15
      相关资源
      最近更新 更多