我不明白為什么我們需要動態(tài)綁定(后期綁定)。假設(shè)我們有 A 類和 B 類,并且 B 類擴(kuò)展了 A 類,現(xiàn)在我們可以編寫類似“A var= new B();”的內(nèi)容 現(xiàn)在假設(shè)兩個(gè)類都包含具有相同簽名的方法,例如方法“cry()”現(xiàn)在我可以編寫類似“var.cry()”的內(nèi)容,現(xiàn)在僅基于“var”的類型編譯器無法綁定正確的方法編譯期間對實(shí)例“var”的方法,但編譯器必須檢查以下語句是否合法“A var= new B();” 現(xiàn)在因?yàn)樗仨殭z查該語句是否合法,所以它必須知道“var”將引用類 B 的實(shí)例,現(xiàn)在如果它知道這一點(diǎn),編譯器必須能夠在編譯時(shí)綁定正確的方法?
2 回答

慕村9548890
TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
假設(shè)你有
void foo(A someA) { someA.cry()
}
現(xiàn)在怎么辦?沒有人可以預(yù)先告訴您傳入的 A 是 A 還是 B!
換句話說,有很多方法無法在編譯時(shí)可靠地了解某個(gè)對象的確切性質(zhì)!

慕容708150
TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
這在一般情況下是不可能的。例如這里:
A var;
if(x) {
var = new A();
} else {
var = new B();
}
var.cry();
在最后一行中,如果 var 引用的是 A 或 B 的實(shí)例,則未知。
添加回答
舉報(bào)
0/150
提交
取消