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