作者tkdmaf (皮皮快跑)
看板PHP
標題Re: [請益] class繼承問題
時間Thu Jul 11 23:37:11 2013
※ 引述《htl74421 (<><魚仔<>< 薰~)》之銘言:
: 我目前的疑惑是這樣:
: class grandfather { //祖父
: public function grandfather()
: {
: //
: }
: public function get_data()
: {
: echo 'hello';
: }
: }
: class father extends grandfather { //爸爸
: public function father()
: {
: //
: }
: }
: class child extends father{ //小孩
: public function child()
: {
: //
: }
: public function test()
: {
: parent::get_data();
: }
: }
: $a = new child();
: $a->test();
: 我在 child 的 test() 中呼叫 father 的 get_data(), 但 father 沒有,所以我想應該
: 會跳錯誤出來,可是它的結果卻是再往上去找到 grandfather 的 get_data(),所以是採用
: 無限上綱的方式? 往上一直找到有為止?
: 這個樣子的話那如果中間是繼承了好幾層然後又有人去覆寫,這樣不就會造成我想的
: get_data()不見得一定就是我想的那個,可能中間有人做了其它修改,這樣不就會大亂了嗎?
我們先弄清楚關係,我就用中文解釋了。
祖父→父親→孩子
父親繼承了祖父,所以父親本身就會有祖父「全部」的特性。
孩子再繼承了父親,孩子就會有父親和祖父「全部」的特性。
但繼承不代表方法要一致。
所以你可以改寫父親的動作。
如果你在父類別修正了遺傳過來的某個方法。
那麼子類別再使用父類別或是本身的方法時,就是直接帶用父類別修改過的方法。
這個做法叫做「覆載」。
事實上,你就算不寫$a->test();
而是寫$a->get_data();
也是會有結果的。
簡單來說,如果繼承體無法具備等同於被繼承體的完全特性的話。
那根本就不用設計「繼承」這個動作了。
你這還只是一直線的直系血親。
還沒扯到哥哥、弟弟、姊姊、妹妹。
這些兄弟姊妹才是做為繼承很重要的因素。
另外你還有伯伯、叔叔、阿姨、姑姑。
這還沒另外再扯到表兄弟姐妹。
很明顯的,繼承這件事是一門很大的血緣關係呢!
當然你問我說能不能偷抱人家的孩子回來教育?
這當然是可以的。
你就思考一下整個概念囉。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.105.158.53
推 tails32100:偷抱人家的孩子XDDDD 07/12 09:21
推 rocairforce:祖父吃麵麵,父親變成吃麵麵不加辣辣 07/12 14:28