Java學習

java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

 

java中創建子類實例怎么調用父類的覆蓋方法

問題:

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的情況不討論的情況下不討論是這樣的,不知道到您是否不滿意,不滿意的話可以發消息繼續討論。


posted on 2009-10-16 09:01 找個美女做老婆 閱讀(3141) 評論(2)  編輯  收藏

評論

# re: java中創建子類實例怎么調用父類的覆蓋方法 2010-07-22 17:50 ijlusryygy

B b=new B();
Class a=b.getClass().getSuperclass();
((A)a.newInstance()).c();  回復  更多評論   

# re: java中創建子類實例怎么調用父類的覆蓋方法 2013-10-08 14:34 ggggggg

不明覺厲@ijlusryygy
  回復  更多評論   


只有注冊用戶登錄后才能發表評論。


網站導航:
 

導航

統計

公告

本blog已經搬到新家了, 新家:www.javaly.cn
 http://www.javaly.cn

常用鏈接

留言簿(5)

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

湖北快3号码表 江苏体彩十一选五推荐号码 河北11选5推荐号今天 广东26选5开奖 15选5任7技巧 时时彩计划软件手机版 湖北快3开奖组式图表 期货交易规则 北京pk10赛车预测软件 山西今日十一选五走势 股市分析