問題:
A 為父類,B為子類,都有一個m()方法,
B b=new B();
((A)b).m();
這樣為什么還是調用的B類的方法呢
是不是調用父類覆蓋方法只能用SUPER呢
還有,事例化一個子類對象后怎么調用父類方法呢
才學,知道的請說下
答案:
B b=new B(); 這種方式,實際上是實例化了子類的對象,注意:內存中還是子類對象。
((A)b).m(); 表面上看起來是父類對象了,但是由于內存中是子類對象,所以調用的還是子類方法。
A b=new B();
b.m();
這種方法和你寫的實際是一個效果,雖然上溯造型到了父類,由于子類重寫了父類的方法,調用的還是子類的方法(也就是所:方法的實現,最后是在子類中實現的)。
所以,總結如下:
如果子類沒有重寫父類的方法,調用父類的方法的時候,實際上是去父類的內存中實現,可以調用父類方法。
如果子類重寫了父類的方法,那么,你雖然上溯造型到了父類,由于內存還是子類,該方法的實現還是在子類,所以用實例化的對象是調用不到父類的,這種情況下,只能用super關鍵字。
用static的情況不討論的情況下不討論是這樣的,不知道到您是否不滿意,不滿意的話可以發消息繼續討論。