2013-03-02 207 views
0

在超作品在Java中所有的子类的方法overridding ....如果一个子类有自己独立的方法,我怎样才能使它发挥作用的...概念在Java

class Polymorphism3 { 

public static void main(String[] args) { 
      // note how these are all considered objects of type Animal by Java 
      Animal[] a = new Animal[4]; 
      a[0] = new Mouse(); 
      a[1] = new Bird(); 
      a[2] = new Horse(); 
      a[3] = new Animal();    
      for (int i=0;i<4;i++) { 
       a[i].pullTail();     
      }   

//...  


class Animal { 
    public void pullTail() { 
     System.out.println("I don't know what to say."); 
    } 
} 

class Mouse extends Animal { 
    public void pullTail() { 
     System.out.println("fart"); 
    } 
} 

class Bird extends Animal { 
    public void pullTail() { 
     System.out.println("tweet"); 
    } 

    public void fly() { 
     System.out.println("flap"); 
    } 
} 

class Horse extends Animal { 
    public void pullTail() { 
     System.out.println("neigh"); 
    } 
} 
+3

有什么问题吗?您正在覆盖超类方法... – jlordo 2013-03-02 00:15:45

+1

'if(a [i] instanceOf Bird)((Bird)a [i])。fly();' – jdb 2013-03-02 00:17:42

+0

尝试在您的一个子类中移除pullTail()方法;然后运行您的Polymorphism3.main()方法。这应该澄清你正在发生的事情。 – 2013-03-02 00:17:49

回答

1

你可以如果它没有在动物中声明,它就不会起作用。
的唯一方法是投给动物鸟如

((鸟)一[1])飞();

您也可以从Bird的putTail实现中调用它。

+0

非常感谢它,现在我得到它只有超级类声明的方法可以工作...在子类 – user2125271 2013-03-02 00:24:24

+0

欢迎来到stackoverflow。不要忘记标记这个问题的答案。 – 2013-03-02 00:27:48

+1

谢谢...已经标记了答案 – user2125271 2013-03-02 00:39:53

1

如果这是关于不能够实例化嵌套类:你需要的是封装类的一个对象:

public class Polymorphism3 { 
    public static void main(String[] args) { 
     // note how these are all considered objects of type Animal by Java 
     Animal[] a = new Animal[4]; 
     Polymorphism3 poly = new Polymorphism3(); 
     a[0] = poly.new Mouse(); 
     a[1] = poly.new Bird(); 
     a[2] = poly.new Horse(); 
     a[3] = poly.new Animal(); 
     for (int i = 0; i < 4; i++) { 
      a[i].pullTail(); 
     } 
    } 

    class Animal { 
     public void pullTail() { 
      System.out.println("I don't know what to say."); 
     } 
    } 

    class Mouse extends Animal { 
     public void pullTail() { 
      System.out.println("fart"); 
     } 
    } 

    class Bird extends Animal { 
     public void pullTail() { 
      System.out.println("tweet"); 
     } 

     public void fly() { 
      System.out.println("flap"); 
     } 
    } 

    class Horse extends Animal { 
     public void pullTail() { 
      System.out.println("neigh"); 
     } 
    } 
}