У меня общий вопрос ООП.
Если у меня есть следующие классы в C #
class Parent
{
public string val = "Parent";
public void getValue()
{
Console.WriteLine(this.val);
}
}
class Child:Parent
{
public string val = "Child";
}
Child child = new Child();
child.getValue();
Код выводит «Родитель». Как я понимаю, это потому, что это указывает на родительский объект, верно?
Если я сделаю то же самое в PHP5:
class ParentClass {
public $val = 'parent';
public function foo()
{
echo $this->val;
}
}
class ChildClass extends ParentClass {
public $val = 'child';
}
$a = new ChildClass();
$a->foo();
Результатом будет 'child'.
Хотя, если я изменюсь
public $val = 'parent';
до
private $val = 'parent';
тогда PHP также покажет 'parent'. C # всегда возвращает 'parent' с модификаторами открытого и закрытого доступа.
Есть ли причина для этого? И какое поведение правильно?
Любые полезные ссылки для чтения будут высоко оценены!
Спасибо!