Php 我可以更改子类中任何父函数的访问修饰符吗?
我可以更改子类中任何父函数的访问修饰符吗 不,这是不可能的。而且不仅在PHP中。子类可能只会“放松”可见性,例如Php 我可以更改子类中任何父函数的访问修饰符吗?,php,c++,Php,C++,我可以更改子类中任何父函数的访问修饰符吗 不,这是不可能的。而且不仅在PHP中。子类可能只会“放松”可见性,例如 class ParentClass { protected function foo() {} } 可能是 class ChildClass extends ParentClass { public function foo() {} } 但不是 class ChildClass extends ParentClass { private
class ParentClass
{
protected function foo() {}
}
可能是
class ChildClass extends ParentClass
{
public function foo() {}
}
但不是
class ChildClass extends ParentClass
{
private function foo() {}
}
除此之外,您还可以使用反射API在运行时更改可见性:
尽管你应该问问自己为什么要这么做。通常,对其子类隐藏方法或属性的父类这样做是有原因的。我自己的测试表明,子类可以增加可见性,但不会降低可见性 例如,假设父类的成员变量声明为
private
。然后子类可以将相同的成员变量定义为private
、protected或public`
类似地,如果父成员声明为受保护
,则子成员可以将该成员声明为受保护
或公共
最后,如果父级声明成员为public
,那么所有子级中的成员都必须是public
。您能给我一些原因吗,为什么是这样吗?在PHP中,接受的答案是正确的。如果将访问修饰符更改为更宽松的:protected=>public,则可以更改访问修饰符?出于好奇,我想知道答案。@Gaurav我不确定我是否得到了你想要的。你能澄清一下吗?子类继承了父类的类型。这意味着,子类必须提供与父类相同的接口,并可能向其添加新方法,但不能使用减法。这就是为什么你可以“放松”修饰语,但不能“收紧”修饰语的原因。@Gordon比我强。对不起,我的回答是错误的。;-)