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();这里为什么会输出base,我的认知是输出child啊。。
2 回答
呼如林
TA贡献1798条经验 获得超3个赞
子类虽然继承父类,但是没有重写inherited方法,调用的实际上是父类的方法
PS:子类继承父类的时候两者的 属性和方法 是分开的,并不是说继承了重写方法或者数学就在内存上覆盖了这样子
既然调用的是父类的方法,那么$this自然是父类本身,所以输出的是base
里面存在一些 继承和多态(误) 知识
PS:理解不够,说的不是很清楚,希望有大神指点一下里面准确的区别
森林海
TA贡献2011条经验 获得超2个赞
如果想显示child,你还需要重写inherited方法,如果不重写,原父类的inherited调用的也是原父类的overridden方法。所以结果为base
- 2 回答
- 0 关注
- 668 浏览
添加回答
举报
0/150
提交
取消