2014-07-03 87 views
-2

根據我的理解,如果調用方法被重寫,那麼方法是根據運行時的對象來決定的。在重寫方法中如何解決對重寫方法的調用?

例如。

class A 
{ 
    void fun1() 
    { 
     System.out.println("fun1 of clss A"); 
    } 
} 
class B extends A 
{ 
    void fun1() 
    { 
    System.out.println("fun1 of class B"); 
    } 
} 

現在,

A a=new B(); 
a.fun1(); 

輸出是:

fun1 of class B 

我無法理解下面的程序

的輸出
class A 
{ 
    void fun1() 
    { 
     System.out.println("fun1 of clss A"); 
    } 
} 
class B extends A 
{ 
    void fun1() 
    { 
    System.out.println("fun1 of class B"); 
    fun2(); 
    } 
    private void fun2() 
{ 
    System.out.println("fun2 of class B"); 
} 
} 
class C extends B 
{ 
    private void fun2() 
{ 
    System.out.println("fun2 of class C"); 
} 
} 

現在,

A a =new C(); 
a.fun1(); 

這是給輸出:

fun1 of class B 
fun2 of class B 

(這意味着未繼承FUN1但是越來越執行B類的FUN1)

爲什麼? fun1被覆蓋,但它不在類C中,並且C的對象是在運行時創建的?爲什麼B的fun1被執行?

+0

簡答:繼承。 – awksp

+0

可能重複[如何重寫方法工作?](http://stackoverflow.com/questions/24556202/how-does-method-overriding-work) –

+0

@HarryBlargle這傢伙問這兩個問題。我想他喜歡一次又一次地提出同樣的問題。 – Jerky

回答

2

C不覆蓋該方法。因此它繼承了它的超類型的實現。那是被調用的那個。

+0

請看編輯的問題。 –

+0

@VikasMangal現在你只是在改變一堆東西。 '私人'方法不會被繼承。 –