1. 程式人生 > >一道簡單的程式碼理解題

一道簡單的程式碼理解題

  • 第一步

這題首先從主程式入口,從輸出語句這裡進入new B():
來到B的構造方法,super(5)則是呼叫了父類A的構造方法,這裡有一個setValue,而B類也重寫了父類A的setValue()方法,那麼應該呼叫哪個類的方法呢?
注意,這裡由於是在B的建構函式裡面,因此要呼叫B類的setValue()方法
B類setValue()方法體裡面呼叫了父類的setValue()方法,這裡給父類變數value設定值為10;
隨後來到B的建構函式的第二行,這裡首先呼叫父類的getValue():
try: value值變為11;
finally: 此時仍然呼叫子類setValue(),此時第一次輸出value:
輸出的值為22

  • 第二步
    接著來到第29行這裡,儘管前面輸出是22,但getValue得到的值是11
    第29行執行過後,再次來到A類的setValue:
    try: value的值變為17;
    finally: 此時第二次輸出value:
    輸出的值為34

  • 第三步
    主程式最後輸出value的值,value還停留在第二步的try處,此時第三次輸出value:
    輸出的值為17

總結:一定要根據程式碼逐句分析,並根據函式位置分析應該呼叫子類還是父類的方法;假如能夠除錯最好了

第一次寫 很垃圾 就這樣吧
有根據其他大牛部落格內容理解,在此表示感謝。