oop - 为什么面向对象中的方法是 "private"?

标签 oop encapsulation

我知道这是一个非常基本的概念。但我仍然无法头脑清醒。我明白为什么成员变量是私有(private)的,因此类用户不能通过设置无效值来滥用它。

但是这如何应用于方法呢?

最佳答案

很多好的答案,但也许还有一个来自自学成才的 Java 程序员,因为我自己经历了这一切,经历了很多痛苦;)

将类视为从外部看到的东西,而不是从内部看到的东西。如果您从外部观察一个类,您会看到什么?

再次以时钟为例,时钟可以为您提供有关当前时间的信息,并且可以设置它以显示正确的时间

所以从外部来看,时钟是一台可以做这两件事的机器; 我们称之为公共(public)方法

但作为这个时钟的构造者,我们知道在任何时间操作之前,我们都必须在显示屏上从 23 切换到 11(就是那种时钟),因此我们必须在内部重新安排一些事情才能做到这一点。在这两种情况下,从 23 更改为 11 对我们来说都很好 - 设置时钟并显示当前时间 - 但我们这样做是“在侧面”,因为用户不必了解所有信息那个复杂的数学。这些是私有(private)方法!

因此,我们的 Clock 类可以有两个公共(public)方法(showTimesetTime),这就是用户想要查看,以及为这些公共(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/

相关文章:

c# - 在 C# UWP 应用程序中的何处粘贴 API 调用

c++ - 如何最好地封装窗口句柄?

c# - 您多久看到一次滥用 C# 速记 getter/setter 的情况?

oop - 抽象和封装有什么区别?

Java:按钮封装

c# - 缓冲流如何工作?

perl - 如何检查每次调用对象方法时的某些值?

java - 在类范围的下一行初始化变量时出错

php - 从继承类调用私有(private)方法

java - 自动将公共(public)部分添加到类的函数中,而无需显式地将它们添加到每个函数中