Mat*_*son 12 php oop inheritance encapsulation visibility
从一些简短的提示,我发现当我执行以下操作时覆盖子类中的超类方法时出现错误:
但是,如果我在另一个方向执行此操作,则不会抛出任何错误:
这对我来说似乎很直观 - 我希望它能以相反的方式工作,以强制执行信息隐藏和封装.这似乎允许糟糕的设计,允许内部以可能破坏其他方法的方式暴露,我不能看到这是一个好主意的情况.为什么以这种方式实施,我错过了什么?
此外,这是其他编程语言的标准做法吗?
Kin*_*nch 16
你所谓的"强制信息隐藏"是可能会破坏子类的东西,因为突然的属性和方法可能会消失.你不能通过这种方式放松限制来破坏事物.
With private有点不同:在这种情况下,从子类的角度来看,属性/方法不存在.因此没有理由,为什么子类可能不会引入具有该名称的属性,因为它将是一个不同的属性.
你是对的,这可能会导致糟糕的设计,但你总是可以构建一个设计不佳的应用程序.