[英]child class accessing parent's private method?
用户在PHP Visibility手册页上发表了评论。 这是第二多被投票的评论。 他用这个代码示例:
<?php
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();
?>
输出将是“基础”。
据我所知:“child”类继承了inherited()方法。 不继承overridden()方法,因为它是私有的,而是定义自己的方法。 但是当测试对象(子类的实例)运行inherited()方法时,它输出“base”。
所以我的问题是:
因为在子类中你没有定义任何function inherited()
,所以它必须调用它的父类方法。 正如你引用的评论所说:
...私有方法仅对定义它们的类可见,并且子类不会看到父类的私有方法。 ...
也就是说,因为你没有任何公共方法来引用孩子的私有方法,例如:
class child extends base {
public function inherited() {
$this->overriden();
}
// ...
从我的角度来看,调用$test->inherited()
将使用其父级的范围,因此,如果您创建父类的实例并调用$this->inherited()
。 它是输出基础 。
尝试做我上面所说的:在子类中,复制并粘贴父的继承方法。 它会输出孩子 。
我不确定这是否得到了很好的解释,如果是,也许它可以帮助你理解更多,如果不是,有人可以帮助我改进它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.