PHP继承调用方法的问题
say
方法的访问权限是public
时输出:BB
<?php
class A
{
public function __construct()
{
var_dump($this);
$this->say();
}
private function say()
{
echo __CLASS__;
}
}
class B extends A
{
public function say()
{
echo __CLASS__;
}
}
$b = new B();
---------- Debug PHP ----------
object(B)#1 (0) {
}
A
输出完成 (耗时 0 秒) - 正常终止
我将代码改成这样, 但是var_dump
出来的对象是B, 为什么调用的还是A的方法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
多看文档
注意关键点, [子类就会继承父类所有公有的和受保护的方法], 也就是说, 当方法为
public
的时候, 子类覆盖了父类的say
, 当方法为private
时, 子类不会覆盖父类的方法还有, 你给的示例代码, 第二段并没有
private
http://php.net/manual/zh/lang...
额, 感谢采纳, 受之有愧. 对于修改后的问题, 只是有些猜想的评论里, 期待大神解答
private是不可以被继承的,是私有的,所以是AB,是父类。
而public是可以被继承、改写,是公有的,所以是BB
你这两段长得一毛一样啊..
你可以这样看
输出1A2B; public的话就是2B2B;
你定义成private私密的,继承它的子类也是无法访问的.而且你两个say的命名一样,就保留了父类的say和子类的say; 你设成public的话,new B子类的say覆盖了父类的say