我知道这是一个非常基本的概念。但我仍然无法头脑清醒。我明白为什么成员变量是私有(private)的,因此类用户不能通过设置无效值来滥用它。
但是这如何应用于方法呢?
最佳答案
很多好的答案,但也许还有一个来自自学成才的 Java 程序员,因为我自己经历了这一切,经历了很多痛苦;)
将类视为从外部看到的东西,而不是从内部看到的东西。如果您从外部观察一个类,您会看到什么?
再次以时钟为例,时钟可以为您提供有关当前时间的信息,并且可以设置它以显示正确的时间。
所以从外部来看,时钟是一台可以做这两件事的机器; 我们称之为公共(public)方法。
但作为这个时钟的构造者,我们知道在任何时间操作之前,我们都必须在显示屏上从 23 切换到 11(就是那种时钟),因此我们必须在内部重新安排一些事情才能做到这一点。在这两种情况下,从 23 更改为 11 对我们来说都很好 - 设置时钟并显示当前时间 - 但我们这样做是“在侧面”,因为用户不必了解所有信息那个复杂的数学。这些是私有(private)方法!
因此,我们的 Clock
类可以有两个公共(public)方法(showTime
和 setTime
),这就是用户想要查看,以及为这些公共(public)方法提供功能的私有(private)方法 (recountTime
)用户不想看到。
因此,一方面,您应该记住,私有(private)是不会被 future 程序员使用您的代码重新实现和访问的(正如上面答案中所指出的)。但私有(private)也意味着事情是在侧面完成的,因此用户看不到。这就是为什么我们将公共(public)方法称为公共(public)接口(interface) - 这是用户从外部看到的所有内容。
对我来说,写下用户(真实用户和其他类)将使用我的类(公共(public)接口(interface)与只是公共(public)方法的签名),然后编写私有(private)方法的签名,我-实现者将使用它来实现 promise 提供给我的用户的公共(public)目标,然后用代码来实现它。
记住旧的 C 规则仍然有效(如 97 Things Every Programmer Should Know 中所示)会很有帮助:函数/方法应该只有几行长,真的!
关于oop - 为什么面向对象中的方法是 "private"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620699/