23.方法重寫的本質與虛方法表的使用

1.方法重寫的本質與虛方法表的使用

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

更多JVM文章請訪問我的JVM專欄:
https://blog.csdn.net/u011069294/category_10113093.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章