invokevirtual什么意思 Java中super存儲(chǔ)的是一個(gè)父類的內(nèi)存地址嗎?
Java中super存儲(chǔ)的是一個(gè)父類的內(nèi)存地址嗎?謝謝。首先,它不是。只是搜索方法不同。不使用多態(tài)性?,F(xiàn)在是討論內(nèi)存地址的時(shí)候了,讓我們?cè)敿?xì)解釋一下具體的原理。Java中所有的非靜態(tài)、非構(gòu)造函數(shù)和非私
Java中super存儲(chǔ)的是一個(gè)父類的內(nèi)存地址嗎?
謝謝。
首先,它不是。只是搜索方法不同。不使用多態(tài)性。
現(xiàn)在是討論內(nèi)存地址的時(shí)候了,讓我們?cè)敿?xì)解釋一下具體的原理。Java中所有的非靜態(tài)、非構(gòu)造函數(shù)和非私有方法都是虛方法,虛方法的調(diào)用將根據(jù)具體的接收者來(lái)決定調(diào)用哪個(gè)方法。Java調(diào)用一個(gè)方法。如果在方法中使用super,本質(zhì)上,它將忽略虛擬方法的多態(tài)搜索特性(使用invokevirtual進(jìn)行動(dòng)態(tài)綁定),而使用invokespecial。區(qū)別在于invokespecial的用法。粗略地說(shuō),它可以指定要調(diào)用哪個(gè)方法(ACC實(shí)際存在) Super flag將影響此指令的行為),但它仍然是通過(guò)使用調(diào)用方法時(shí)默認(rèn)傳入的此變量的引用來(lái)調(diào)用的。