2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
invokespecial
用于實(shí)現(xiàn)三件事之一
構(gòu)造函數(shù)調(diào)用
調(diào)用
private
方法super. …
打電話_
雖然 1. 在這里不適用(因?yàn)槟繕?biāo)方法的名稱不是<init>
),但其他任何一種情況都要求接收器類型是當(dāng)前類或其子類。因此,即使方法的聲明類是Type
,實(shí)際接收者的類型也應(yīng)該可以分配給當(dāng)前類,Type$ClassType
。
與您通過更改創(chuàng)建的最接近的等價(jià)物是super
調(diào)用,盡管在 Java 源代碼中,調(diào)用方法 viasuper
強(qiáng)制接收器引用與 相同this
,它本質(zhì)上可分配給當(dāng)前類。
在字節(jié)碼級(jí)別,規(guī)則限制較少,但不允許在可能指向完全不相關(guān)的子類層次結(jié)構(gòu)的實(shí)例的類型引用上調(diào)用允許繞過當(dāng)前類或其子類中的方法聲明的方法調(diào)用,即Type
不是一個(gè)Type$ClassType
。
apangin 的回答中已經(jīng)引用了相關(guān)的 JVMS 規(guī)則。
添加回答
舉報(bào)