abstract class base { public function inherited() { $this->overridden(); } private function overridden() { echo 'base'; } } class child extends base { private function overridden() { echo 'child'; }}$test = new child();$test->inherited();這里為什么會(huì)輸出base,我的認(rèn)知是輸出child啊。。
2 回答

呼如林
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
子類(lèi)雖然繼承父類(lèi),但是沒(méi)有重寫(xiě)inherited方法,調(diào)用的實(shí)際上是父類(lèi)的方法
PS:子類(lèi)繼承父類(lèi)的時(shí)候兩者的 屬性和方法 是分開(kāi)的,并不是說(shuō)繼承了重寫(xiě)方法或者數(shù)學(xué)就在內(nèi)存上覆蓋了這樣子
既然調(diào)用的是父類(lèi)的方法,那么$this自然是父類(lèi)本身,所以輸出的是base
里面存在一些 繼承和多態(tài)(誤) 知識(shí)
PS:理解不夠,說(shuō)的不是很清楚,希望有大神指點(diǎn)一下里面準(zhǔn)確的區(qū)別

森林海
TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果想顯示child,你還需要重寫(xiě)inherited方法,如果不重寫(xiě),原父類(lèi)的inherited調(diào)用的也是原父類(lèi)的overridden方法。所以結(jié)果為base
- 2 回答
- 0 關(guān)注
- 840 瀏覽
添加回答
舉報(bào)
0/150
提交
取消