-1
说,例如我有两个类A
和B
:类属性是否在扩展类上被覆盖?
答:
class A {
private $name = "Joe";
}
B:
class B extends A {
private $name = "Scotto";
}
会有什么的$name
的价值是什么?它是否覆盖父类属性,或者它会在实例中被实例化吗?任何帮助将是伟大的,谢谢!
说,例如我有两个类A
和B
:类属性是否在扩展类上被覆盖?
答:
class A {
private $name = "Joe";
}
B:
class B extends A {
private $name = "Scotto";
}
会有什么的$name
的价值是什么?它是否覆盖父类属性,或者它会在实例中被实例化吗?任何帮助将是伟大的,谢谢!
我会建议在文档页面上特别阅读this comment。重点在于方法,但属性相同
...私有方法只对定义它们的类可见,而子类不会看到父级的私有方法。如果孩子没有看到父母的私人方法,孩子不能覆盖他们。
你举的例子:
class A {
private $name = "Joe";
public function getName() {
return $this->name;
}
}
class B extends A {
private $name = "Scotto";
}
class C extends A {
private $name = "Scotto";
public function getName() {
return $this->name;
}
}
$a = new A;
$b = new B;
$c = new C;
$a->getName(); // 'Joe'
$b->getName(); // 'Joe'
$c->getName(); // 'Scotto'
@naththedeveloper我可以很容易地尝试,但我正在寻找一个更深入的答案不仅仅是“哇,好,这就是它” –
为什么会被替换?私有意味着只有这个类可以访问这个属性。因此,每个类都有自己的'$ name'定义。 [Clicky](https://eval.in/private/830e62ffefe9ab) –
但是,当'$ name'被定义为'protected'或'public'时,它确实被'Scotto'取代。我建议阅读[文档](http://php.net/manual/en/language.oop5.visibility.php)了解可见性。它在示例代码中声明:“我们可以重新声明公共和受保护的属性,但不是私有的”。 –