1.方法重寫的本質與虛方法表的使用
下面的圖片主要講的是當子類重寫了父類的一個方法的時候,當調用被重寫的方法的時候,會先去子類中找有沒有,如果沒有就去它的父類找。這樣會存在一個循環查找的過程,效率很低。
爲了提高性能,就出現了虛方法表。
1.每個類都有一個虛方法表,存放着各個方法的實際入口。
2.虛方法表在鏈接階段創建並初始化。
虛方法表例子:
如下圖所示,Son
類繼承自Father
類,Son
類重寫了Father
類的hardChoice(QQ)
和hardChoice(_360)
方法。
Son
類和Father
類都有一個虛方法表。對於父類和子類都沒有重寫過的Object
的方法,比如toString
,指向的是Object
的toString
,當子類調用的時候,會直接從虛方法表中去調用到Object
的toString
,而不用從父類去找,提高了效率。
對於重寫的hardChoice(QQ)
和hardChoice(_360)
方法,虛方法表中存儲的就是自己這個類的hardChoice(QQ)
和hardChoice(_360)
方法的入口,調用的時候,直接調用自己的就可以,也就不用去父類查找了。
更多JVM文章請訪問我的JVM專欄:
https://blog.csdn.net/u011069294/category_10113093.html