例題如下:
classm
public
intsum1()
public
intgeti()
}class n extends
m
public
intsum()
public
intsum1()
}
m m = new n();
system.out.println(m.sum());//輸出結果為40,
system.out.println(m.sum1());//輸出結果為30
當呼叫方法時,方法會和該物件的記憶體位址即執行型別進行繫結,當呼叫屬性時則沒有動態繫結,那裡宣告,**使用。具體為:當登出n類的sum與sum1方法時:
m呼叫sum方法,因為m的執行型別為n,所以先去n中找sum方法,n中沒有則去到父類m中呼叫m的sum方法,m的sum方法內返回了乙個getid方法,此時m,n中均有該方法,但因存在動態繫結,所以返回的n中的
getid方法,n的getid方法中返回的i為n中的i,所以輸出結果為20+10=30
m呼叫sum1方法,因為m的執行型別為n,所以先去n中找sum1方法,n中沒有則去到父類m中呼叫m的sum1方法,此時sum1方法內返回的i為m中的i,所以輸出結果為:10+10=20
關於繼承和動態繫結的機制
faq 2.24 繼承是乙個很強大的手段,它具有很強的擴張能力,它使軟體可以有is a和kind of的關係。在下面的例子裡,類vehicle定義了乙個 0的成員函式 也就是在startengine 成員函式的宣告後面寫上 0 這種語法的意思是startengine 成員函式是純虛函式並且vehic...
Python的動態繫結與賦值機制
文章出處 與c c 等靜態型別繫結的語言不同,python的型別是動態繫結的。也就是你在使用乙個變數的時候是不必對它的型別進行宣告的。這是python的強大之處。它使得python可以靈活的操作各種不同型別的變數。它背後的機制是什麼呢?掌握幾個概念,就可以明白。1.名字 name 與物件 objec...
Python的動態型別繫結與賦值機制
與c c 等靜態型別繫結的語言不同,python的型別是動態繫結的。也就是你在使用乙個變數的時候是不必對它的型別進行宣告的。這是python的強大之處。它使得python可以靈活的操作各種不同型別的變數。它背後的機制是什麼呢?掌握幾個概念,就可以明白。1.名字 name 與物件 object 先說說...