为什么面向对象的“私有”方法?

时间:2010-04-12 08:28:33

标签: oop encapsulation

我知道这是oops中一个非常基本的概念。但我仍然无法理解。我理解为什么成员变量是私有的,所以类用户不能通过设置无效值来滥用它。

但这怎么能适用于这些方法呢?

9 个答案:

答案 0 :(得分:97)

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

将某个类视为从外部看到的内容,而不是内部看到的内容。如果你从外面看一个班级,你看到了什么?

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

所以从外面看东西,时钟就是可以做这两件事的机器;我们称之为的公共方法

但我们作为这个时钟的构造者,我们知道在任何时间操作之前我们必须在显示器上从23切换到11(这是那种时钟),所以我们必须在内部重新排列一些东西才能这样做。在两种情况下,从23变为11对我们来说都很合适 - 设置时钟并显示当前时间 - 但我们这样做“在旁边”,因为用户不必知道所有复杂的数学。这些是私人方法!

因此,我们的Clock班级可以有两个公开方法showTimesetTime),这些都是用户 想要的< / em> ,以及为这些公开方法提供功能的私有方法(recountTime),用户 不会希望 看看。

所以一方面,你应该记住私有是将不会被未来的程序员重新实现和访问使用你的代码(正如上面的答案所指出的那样)。但私有也意味着侧面做的事情,所以用户看不到它。这就是为什么我们将公共方法称为公共接口 - 所有用户都会从外部看到它。

对我来说,有用(我自学成才,所以也许这不是一种非常流行的方法......)写下用户(真实用户和其他课程)对我的课程所做的一切(公共界面与只需公共方法'签名),然后编写私人方法的签名,我实施者将用于完成承诺提供给我的用户的公共目标,然后用代码实现它。

记住旧的C规则仍然有效(如97 Things Every Programmer Should Know中所表示的那样)可能会有所帮助:函数/方法应该只有几行,真的!

答案 1 :(得分:27)

私有方法可用于将任务分解为较小的部分,或用于防止类中其他方法经常需要的代码重复,但不应在该类之外调用。

答案 2 :(得分:9)

方法(也)用于构造代码,我不希望我的实现的内部结构通过接口泄漏。通常我有一种方法,它对外部似乎只做一个任务,但实际上必须执行几个较小的任务。在这种情况下,我为每个子任务创建一个小的私有方法,并从公开可见的方法中调用它们。

答案 3 :(得分:6)

出于完全相同的原因 - 某些方法仅用于在类中使用,非类对象的使用将被滥用。想想增加和减少类的对象计数的方法 - 这些方法只能从类的构造函数或析构函数中调用,因此应该是私有的。

答案 4 :(得分:3)

私有方法只能由同一类中的方法或同一“模块”中的方法调用。方法通常不是私人的;通常他们会受到保护,以便孩子可以打电话给他们,或者公开,以便其他代码可以打电话给他们。

答案 5 :(得分:3)

在某些情况下,您希望仅使用特定类来使用方法,并保护它不被任何其他类使用。

仅举例说明如何使用它:

你有一个班级时钟,它运行并运行跟踪时间和日期。您可以通过公共方法获取时间或日期。但时钟必须是正确的。所以你不能从课外调整时间或日期。但时钟本身需要能够调整时间(例如节省时间的日光)

在这种情况下,Clock会有一个私人方法来调整时间。

然后你还有一个额外的专家,构造代码。您可以将代码拆分为较小的私有方法,这些方法可以构建代码,但可以防止它们在类外部使用。

答案 6 :(得分:1)

记住所有其他答案。值得记住的是,对于许多语言的程序员来说,私有方法只是提示。在大多数情况下,仍然可以使用私有方法。例如,通过创建一个使用私有方法从对象继承的对象,并使用新的公共方法覆盖其方法。

在一些现代的高度面向对象语言中,私有方法仅按惯例存在。开头的'_'方法被认为是私有的。

答案 7 :(得分:0)

Private 方法是那些在声明它们的类之外的其他类中无法访问的方法。我们只能在声明它们的类中执行功能。 但是在C ++中,它们也可以通过 Friend 类进行访问。

公共方法是可以在任何类中访问的那些方法。

受保护的方法也是可以在派生类中访问的方法。

谢谢

答案 8 :(得分:0)

这是因为其他人无法言行。

在一个完美的世界中,您不会通过“隐藏”他人的东西而得不到任何收益,您可以将所有方法公开,告诉他们使用哪些方法,然后去玩。但是迟早有人会依赖您编写的方法,比如说一种本该是内部的方法,仅对您而言,您希望可以随时更改的一些低级内容-las,现在您不能,因为有人在依靠它。您更改它,其他东西坏了。没有明显的原因。因为有人没有按照您的建议使用您的类,所以有人调用了您的内部方法,您改进了代码中的某些内容。

基本上:隐藏方法保留更改它们的权利。除非这是一个重要的步骤,例如新版本,否则公共接口不应更改。但是内部世界是您的游乐场。无论您如何完成工作,只要您交付了预期的输出,这都不关别人的事。

因此将方法设为私有的最大原因是您的自由。