根據我的理解,如果調用方法被重寫,那麼方法是根據運行時的對象來決定的。在重寫方法中如何解決對重寫方法的調用?
例如。
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被執行?
簡答:繼承。 – awksp
可能重複[如何重寫方法工作?](http://stackoverflow.com/questions/24556202/how-does-method-overriding-work) –
@HarryBlargle這傢伙問這兩個問題。我想他喜歡一次又一次地提出同樣的問題。 – Jerky