classtest
static
class
a
public
void setvalue(int
value)
public
intgetvalue()
finally}}
static
class b extends
a
public
void setvalue(int
value)
}}
本人看到此題,讀著讀著就一臉懵逼了,但是經過查閱資料以及大哥們的解答,學習到了很多,在此記錄一下此題,幫助大家共同學習和進步。
在main()函式中,首先new b()例項,此時b類中的無參建構函式現實的呼叫了父類a的帶參建構函式。
在父類a中的帶參建構函式中,又呼叫了setvalue(v)方法,但是在父類a和子類b中都有setvalue(v)方法,並且此時正在初始化的是乙個子類b的例項物件,根據j**a多型特性,此時會呼叫的是子類b中的setvalue(v)方法,而不是父類a中的setvalue(v)方法。
而在子類的setvalue()方法又顯示的呼叫了父類的setvalue()方法,將父類中的value值設定為了2*5=10
繼續執行b類構造方法中的setvalue(getvalue() - 3)方法。
在上面方法中先執行getvalue()方法,而在子類b中,沒有重寫父類的getvalue()方法,因此呼叫的是父類的getvalue()方法。在父類的getvalue()方法中,分為如下幾步:
在執行getvalue()方法之前,value值已經被設定為10。
value++後,value的值為11
將value值return返回出去
緊接著執行finally中的**,所以暫時性的將上一步中的value值儲存起來。等到finally**塊執行完成後再正真的將value值返回出去。
在finally中,又執行了setvalue()方法,此時執行的也是子類b中的setvalue()方法,因為此時我們正在初始化的是子類b的例項物件。(j**a執行時多型)
而在子類b中的setvalue()方法中又顯示的呼叫了父類a中的setvalue()方法,此時的value值又被設定為了2*11=22
緊接著執行finally**塊中的輸出語句,列印出value值為22
緊接著將try語句中的return語句進行返回,返回的是暫存的value值11
返回值11之後,繼續執行子類b中的setvalue()方法,此時setvalue()方法中的引數值為11-3=8,在執行setvalue()方法時,顯示的呼叫了父類的setvalue()方法,並將value值設定為了2*8=16
終於,我們執行完了main()方法中的new b()方法,此時的value值為16,緊接著呼叫main()方法中的new b()方法的後續的方法getvalue()方法
呼叫getvalue()方法,子類b中沒有重寫父類a的getvalue()方法,所以實際上執行的時父類中的getvalue()方法,步驟如下:在執行getvalue()方法之前,value值已經被設定為16。
value++後,value的值為17
將value值return返回出去
緊接著執行finally中的**,所以暫時性的將上一步中的value值儲存起來。等到finally**塊執行完成後再正真的將value值返回出去。
在finally中,又執行了setvalue()方法,此時執行的也是子類b中的setvalue()方法,因為此時我們正在初始化的是子類b的例項物件。(j**a執行時多型)
而在子類b中的setvalue()方法中又顯示的呼叫了父類a中的setvalue()方法,此時的value值又被設定為了2*17=34
緊接著執行finally**塊中的輸出語句,列印出value值為34
緊接著將try語句中的return語句進行返回,返回的是暫存的value值17
最後在main方法中列印返回的值,返回的值為17,列印17
最後控制台上的列印結果為22 34 17
具體流程就到此結束了,是不是感覺很麻煩,但是實際上很簡單,相信你也看出來了,實際上就是對多型的理解,麻煩的就是呼叫過來呼叫過去就暈了,只要理清思路還是很簡單的。
(注意:try語句中的返回值會先暫時儲存,等待finally**塊執行完成後再將暫存的值返回,finally**塊中的**不會影響暫時儲存的返回值哦!)
牛客網SQL刷題記錄
查詢入職員工時間排名倒數第三的員工所有資訊,為了減輕入門難度,目前所有的資料裡員工入職的日期都不是同一天 select from employees order by hire date desc limit2,1 or select from employees x where3 select s...
劍指offer 牛客網錯題記錄 四
題目 在乙個字串 1 字串長度 10000 中找到第乙個只出現一次的字元的位置。異常情況返回 1 這道題借助雜湊表,用空間換取執行時間,事件效率可以達到o n 就是首先遍歷字串,以字元的ascii碼為下標,對應的值為該字元出現的次數。再次遍歷字串,以字元為下標判斷雜湊表對應的值,如果為1則返回該索引...
c 牛客刷題記錄2 18
1.c 標籤使用 includeusing namespace std intmain 這裡執行不會報錯,http 作為標籤label的使用,可以實驗goto http 跳轉到這裡,進行cout語句。1 例子 2for int i 0 i 100 i 3 9 1011 中間可以有很多 1213 ca...