【发布时间】:2012-03-11 18:35:02
【问题描述】:
通过一些简短的摆弄,我发现在执行以下操作时在子类中覆盖超类方法时出现错误:
- 用私有子类方法覆盖受保护的超类方法
- 用受保护或私有子类方法覆盖公共超类方法
但是,如果我在另一个方向这样做,则不会引发错误:
- 用受保护或公共子类方法覆盖私有超类方法
- 用公共子类方法覆盖受保护的超类方法
这对我来说似乎违反直觉 - 我期待它以相反的方式工作以强制执行信息隐藏和封装。通过允许以可能破坏其他方法的方式暴露内部结构,这似乎允许糟糕的设计,我看不出这是一个好主意的情况。为什么以这种方式实施,我错过了什么?
另外,这是其他编程语言的标准做法吗?
【问题讨论】:
-
我的意思是,为了防止组件之间产生依赖关系,最好坚持只公开最少数量的公共方法。允许公开私有方法会鼓励其他开发人员使用它们,因此会破坏使用多态性交换类的能力。
-
如果我错了,请纠正我:编程语言是一种工具,应该尽可能灵活;代码、模式和行为的设计取决于开发人员的良心。现在,如果我们假设您不是在谈论外部漏洞,那么您真的是在谈论来自一个团队的程序员破坏开发吗?
-
好吧,为了尽可能灵活,它根本不会有公共/私有/保护 :) 我真正要问的是“为什么有时有必要公开私人事物”,因为我无法设想有帮助的用例。另一方面,我确信有时必须有一个,否则它会抛出一个错误,以便根据包含公共/私有/受保护的决定来帮助实施良好的设计。或者我假设。
-
您不能公开私有方法。它们将是两个不同的方法。
-
基本上,您可以添加到子类中,但不能从中删除。
标签: php oop inheritance visibility encapsulation