让我们看看它的元级代替,并且假装我们是一类Person
的实例。
我们有一些关于我们的信息 - name
,age
,gender
,weight
,height
,hairColor
,eyeColor
,等等。大多数情况下,这是我们通过偶然相互作用向外界公开的信息,所以这可以被认为是“公共”信息。我的意思是,有没有意义的隐藏你的eyeColor
除非你真的想......
现在,有几件事情,我们不知道外面的世界,但都愿意告诉我们的孩子。这些都是食谱,如何解决数学问题,如何纳税,如何处理讨厌的分手等。这些功能是通过继承传递下来的,因此只能用祖先层次来引用。我们称之为“受保护”信息,或称为“受保护”方法来解决这些问题。
还有一些我们只留在家里的东西,比如你的小狗咀嚼了你姐姐最喜欢的娃娃的次数,或者家庭继承的地方。我们可以考虑这一点,用一些言辞模式,在我们家庭的等级体系中保密。
最后,我们只需要不要与其他人共享,但我们需要这些信息才能每天运行。这是我们认为是“私人”的。
现在,这个元例子的例子是Access Modifiers的经典例子。
public
表示每个人都可以看到它并按照自己的意愿去做。也就是说,如果你有一个public
可访问的名字,那么我可以随心所欲地将它改为“Overflow Prime”,并且你无能为力。
protected
表示该字段或方法仅对那些直接从类继承的字段或方法可见。因此,例如,Child extends Parent
意味着我可以访问Parent
的受保护方法和字段。
“package-private”,或者简单地说“no modifier”,是一个只能在包的范围内访问和修改的字段或方法。这意味着就包装而言,这些字段为public
,但对于包装以外的任何物品完全不知道。
private
是一个字段或方法只有类的实例可以使用和直接操作。即使存在继承链,如果方法或字段是私有的,子类也无法获得它。
现在,这是什么意思你的真实世界的例子?
比方说,例如,您的Web应用程序处理敏感信息,如财务记录。如果我能够将持有我每周薪酬支票存根的课程实例从微薄的600美元修改为79,999美元,那么我会同时损害应用程序的完整性,暴露了一个重大的财务错误(从中发现了不好的事情),并且会因为我的麻烦而被削减一次体面的每周检查。
这就是encapsulation背后的想法。我只想向外界暴露最低限度的钩子和信息,以确保我的应用程序的完整性,并确保有人不能削减自己不应该得到的支票。
这不是危险的时候_you_使用它。对于有权访问您的代码的其他人来说,使用它的方式可能与您的预期不同,这是很危险的。 –
注意,在java中,有*四个*隐私范围。您省略“包装范围”。没有关键字,但它非常有用。 – djeikyb