2014-12-09 3 views
1

Эта программа должна индивидуально вызывать 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 
+1

Почему 'funFact()' static? –

+1

Если вы создаете каждое животное как объект, вам не нужна функция funFact, чтобы быть статичной. – PaulHickman

+0

. Проверьте это тоже: http://stackoverflow.com/questions/2223386/why-doesnt-java-allow-overriding -of-static-methods –

ответ

6

funFact статический. Переопределение не работает на статических методах.

Извлеките ключевое слово static из всех ваших методов (поскольку вы все равно вызываете их с помощью ссылки на экземпляр), и он будет работать так, как вы ожидали.

+0

Круто, спасибо огромное! – Fluffle

Смежные вопросы