2012-06-16 23 views
0

一個簡單的向上轉型是在其中子CALSS(狗)的目的是通過它的超類(動物)引用去......上溯造型 - 而調用subcalss對象

爲什麼我不能夠調用方法 'callme2()'

CODE: -

class Animal 
    { 
     public void callme() 
     { 
      System.out.println("In callme of Animal"); 
     } 

    } 

    class Dog extends Animal 
    { 
     public void callme() 
     { 
      System.out.println("In callme of Dog"); 
     } 

     public void callme2() 
     { 
      System.out.println("In callme2 of Dog"); 
     } 
    } 

    class upcasting 
    { 
     public static void main (String [] args) throws Exception 
     { 
      Animal a = new Dog();  
    a.callme(); //-In call me of Dog  
    a.callme2(); // - error why ? 
    } 
    } 
+1

由於'A'變量是動物類型的引用,而不是'Dog'類型 –

回答

3

由於a被分配給超類Animal

可以調用基法作爲FOL低:

((Dog)a).callme2() 
+0

一個被分配給超類動物則它是如何能夠調用由於狗的「呼我」的方法壓倒性的..?我對嗎 ? – Nil

+1

@ rd4code,你是對的。調用'callme'可以在運行時解析(動態綁定)。請參閱http://javarevisited.blogspot.com/2012/03/what-is-static-and-dynamic-binding-in.html –