1.既然繼承是透過引用傳遞 那為什麼子類別重寫父類別的屬性和方法不會改變父類別的屬性和方法呢。 那繼承的引用傳遞指的是什麼 什麼情況下才會改變父類別的成員方法和成員屬性。
2.既然靜態屬性和方法和常數 在靜態區 那在子類別重寫 為什麼仍然不會覆蓋原來的屬性和變數。
3.新編輯的問題— — — 就是關於靜態區- 大家都知道查看物件物件裡只有成員變數堆裡只有成員方法的位址成員方法和類別是在程式碼區的而靜態成員方法和成員方法不一樣靜態成員方法是在靜態區obj->靜態成員變數會報錯而obj->靜態成員方法可以成功呼叫。這是為什麼 有人能講一下 程式碼區 和靜態區和物件的關係麼 感激不盡! ! ! ! !
樓上的回答,沒有一個說到點子上的。自行百度:後期綁定以及前期綁定;另外看看tij關於繼承和多態部分的知識
你可以試試看這樣理解,繼承是透過引用傳遞,子類別是繼承的父類,父類別的屬性和方法,那麼記憶體裡面就肯定父類別的全部屬性和方法。
然你在子類別覆蓋父類別的方法,其實相當於把指標從父類別的a()方法移動到子類別的覆蓋的a()來,實際父類別的a()還是存在的,並不會真的從記憶體裡面把父類別的a()方法替換掉。
繼承的引用傳遞:是指在記憶體中,父類別的程式碼只有一份,如記憶體位址是0x000010,當子類別去繼承的時候,是直接從這個記憶體位址去讀取父類別的程式碼。而不會重新把程式碼拷貝一份到記憶體裡面來。
這個可以去看一下動態綁定機制,子類別和父類別會在方法區形成兩張各自的方法表和各自的資料型別。 。 。不會覆蓋
個人對繼承的理解:
父類別已有的方法,繼承父類別的子類別是預設有的(方法和屬性)。但是子類別可以選擇去重寫父類別的方法,這樣的話,子類別在呼叫這些被重寫的方法的時候,就會優先去呼叫子類別修改的方法,而如子類別沒有修改該方法的時候,就會預設呼叫父類別的該方法。
對於樓主說的繼承是引用傳遞,個人認為繼承的時候默認這些方法和屬性是指向父類的,但是在實際調用的時候,會去檢測子類有沒有重寫父類的方法或者屬性,如果有的話,實際呼叫就會指向子類別重寫的方法和屬性,沒有的話,依然是指向父類別的方法和屬性。
個人愚見...
子類是繼承的父類,父類的屬性和方法,子類可以繼承,但是不能改變父類,子類只有一個父類,但是,父類可以有很多子類,如果子類更改了父類別的屬性和方法那本身不是就需要再次繼承新的方法和屬性?這就無解了。 。 。
子類別只能複寫父類,程式碼先執行子類別中的方法,不再繼續執行父類別被複寫的該方法。
繼承在php語言中只能從高到低繼承,不能逆向覆蓋
我繼承父類別的方法,相當於把父類別的所有方法再我的類別裡面寫了一遍,而和我現有的有衝突的方法,我不寫進來就是了。是說父類別有內沒有的就繼承,父類別有,你也有,就以你為準。