PHP继承小问题
自己写了一点测试继承关系的代码,如下:
<html>
<body>
<?php
class A
{
public $pub_A;
private $pri_A;
public function pub()
{
$this->pub_A = 'It is public of A!';
echo "<p>".$this->pub_A."</p>";
}
protected function pri()
{
$this->pri_A = 'It is private of A!';
echo "<p>".$this->pri_A."</p>";
}
}
class B extends A
{
public $pub_B;
private $pri_B;
function __construct()
{
echo "<p>".$this->pri()."</p>";
$this->pri_A = 10;
echo "<p>".$this->pri_A."</p>";
}
}
$b = new B;
?>
</body></html>
重点我标了出来,在父类A中,$pri_A是private的,应该不能被子类B继承,可为什么下面可以对pri_A赋值并且显示出赋值后的数?
[解决办法]
private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。
经过private便签标记的方法或者属性可以在继承类中重新定义。
每一个类只能看到它自己定义的私有方法。
[解决办法]
子类可以通过父类的公有方法去访问父类的属性
[解决办法]
我测试了下代码,如果在A中给$pri_A="aaa",在B中不赋值的话将不能得到值,在B中赋值之后得到赋值后的值,可见在子类中是可以对父类的私有属性重新定义的。
[解决办法]