作者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
1F:推 tails32100:偷抱人家的孩子XDDDD 07/12 09:21
2F:推 rocairforce:祖父吃面面,父亲变成吃面面不加辣辣 07/12 14:28