解释OOP中的封装

时间:2014-01-07 06:10:38

标签: java oop encapsulation

我是OOP的新手,我对封装有些怀疑。

  1. “部分”和“弱”封装的区别是什么意思? java中的一个例子可以帮助我。

  2. 封装是指仅将数据放在像类一样的胶囊中,还是必须存在访问修饰符?

  3. 我读到封装意味着隐藏数据并将数据聚集在一起。

    在这个例子中:

    class A{ 
      public int a;
      public void foo(){}
    }
    

    以上代码是封装的例子吗?如果是,则外部世界不会隐藏任何内容,因为afoo是公开的。此示例必须afoo private才能被视为封装吗?

2 个答案:

答案 0 :(得分:0)

这是一个很好的解释https://mail.mozilla.org/pipermail/es-discuss/2010-December/012334.html

基本上,如果您正在实现一个Java库或API,那么您的目标就是强大的封装,以便用户无法访问他们不应该访问的内容。

强封装意味着没有人可以访问秘密内部变量,因为你有一个正确的继承heirachy并且所有这些东西都是隐藏的。

您的示例是非常弱的封装,因为变量a是公共的。如果您的课程是API而且a实际上是credit_card_details,那么您将遇到大麻烦。

对于初学者,您可以将这些变量设置为私有,并使用getter和setter来访问它们。

总的来说,你需要一些抽象的东西来封装它。从OOP的角度来看,我听到封装的唯一另一件事就是简单地将现实世界对象捆绑到类中

答案 1 :(得分:0)

面向对象是关于消息的。如果您只能要求在对象内设置或获取值,则会封装这些值。访问它们的唯一方法是通过预定义的协议,即setter或getter或其他任何方法。 如果你有一个公共字段,它看起来没有封装,但你仍然没有变量,把它想象成一个默认的集合或得到。