学习java,为什么我的私有私有?

Jak*_*yer 3 java programming-languages private public

我正在学习java,来自python有很多我不完全理解的东西存在于java中,其中第一个必须是公共和私有声明.我的意思是从一种没有真正可见的公共私人声明的语言到一切必须是私人的语言,我理解他们所做的基本原则.我问'为什么'他们这样做.为什么有人会关心谁接触私处?如果你是一个优秀的程序员,你应该知道你应该'和'不应该'在代码中戳的那些位,这应该不是一个问题.为什么要保密呢?为什么隐藏,模糊,让世界变得私密?为什么要开始照顾.

Fre*_*Foo 9

(意见的答案如下.)

这是因为Java是一种束缚和纪律语言,旨在迎合平庸的程序员.Python,otoh,是一种语言,旨在同意成年人同意将对象的私有部分彼此暴露,相信其他程序员不要滥用提供给他们的无证/无担保功能.如果他们做了什么,什么都打破了,那些破坏东西的人就可以保留这些东西.

Python确实有一些访问控制,例如__all__隐藏/显示模块的某些部分,只是所有这些都是可选的,并且可以绕过这个人的风险.

(重复我在评论中所说的内容:我并不是说所有Java程序员都是平庸的.我只是说该语言的设计使得这些程序员可以安全地使用它.)

  • @Jakob Bowyer:这是对你的问题的直接回答"*为什么*任何人都应该关心谁接触那里的私人部分",考虑到你的"'应该'和'不应该'戳代码"评论.现代编程语言设计背后的原因在于计算理论而不是程序员心理学和IT部门的经济学. (5认同)

Boh*_*ian 6

因为其他人并不像你那样关心你的私处.你决定什么是私人的,不是私人的.

值得注意的是,公共事物定义了API - 与外界的合同 - 这是一个重要的决定.另一方面,尽可能多的东西应该是私有的 - 这就是封装.欢迎来到OO.


Dhr*_*ola 5

您不希望其他程序员访问并可能修改您的私有变量.例如

private int ryan; //its your responsibility to save private ryan
Run Code Online (Sandbox Code Playgroud)

除了所有的笑话,私有对封装很有用.此外,私有构造函数不允许在工厂方法模式中进行子类化和特征化.具有私有构造函数的类只允许在此类中实例化对象(例如,可以通过静态公共方法完成).

正如你所看到的,私有化可能非常有用......