为什么可以在PHP中重写实例变量,而在Java中却不能?

为什么可以在PHP中重写实例变量,而在Java中却不能?,java,php,oop,instance-variables,Java,Php,Oop,Instance Variables,考虑以下代码: <?php class Base { protected $name = "Base"; public function getName() { return $this->name; } } class Foo extends Base { protected $name = "Foo"; } $f = new Foo(); echo $f->getName();

考虑以下代码:

<?php

class Base {
        protected $name = "Base";

        public function getName() {
            return $this->name;
        }
}

class Foo extends Base {
        protected $name = "Foo";
}

$f = new Foo();
echo $f->getName(); // output: Foo

$b = new Base();
echo $b->getName(); // output: Base

您使实例变量受保护,这意味着扩展类可以覆盖它。如果你想防止这种情况发生,请使用私有的


不,这与我无关


我想这只是PHP开发人员做出的一个设计决定。这可能是因为它更像是一种脚本语言而不是Java。(在Java中,您需要有一个字段的“虚拟”查找表来支持这一点,或者自动生成getter/setter)。

我没有票数,所以我无法找到您的答案,但这是唯一一个接近于回答为什么在PHP中超类ivar被覆盖的问题,而在Java等中,超类ivar是隐藏的(它们并不完全相同)。-1:这并不能回答为什么可以在PHP中这样做,而不能在Java中这样做。