你能帮我理解封装吗(初学者)?

时间:2014-07-18 00:44:44

标签: java oop encapsulation setter getter

我一直在使用一本迄今为止一直很出色的Java书籍,但它并没有擅长解释我们使用setter和getter的原因。我已经搜索了其他帖子,但没有一个真正帮助过我。我只是从书中发布一个程序并用它来解释我的问题。

   package lesson1;
public class GoodDog {
   private int size;

   public void setSize(int sz){
      if(sz > 10){
         size = sz;
      }
   }
   public int getSize(){
     return size;
   }
}

第二课:

   package lesson1;
public class GoodDogTestDrive {

   public static void main(String[] args) {
      GoodDog one = new GoodDog();
      one.setSize(15);
      System.out.println(one.getSize());
   }
}

这是我的第一篇文章,如果它没有作为代码出来那么请原谅我。不要问为什么这些课程被命名为,我没有想象力,只是使用了这本书的名字。

无论如何,我的理解是封装(对我来说这基本上意味着getter和setter)阻止了对即时变量的直接访问。唯一合理的原因是因为不应允许某些即时变量值。

例如说我们有int高度; (即时变量) 我们不应该说object.height = 0; (' object'是随机引用变量)。在我的小程序中,它只是一个狗的高度,只是一个简单的限制。它并不意味着有意义,但我只是想弄清楚这个概念。当程序员需要使用彼此的代码时,封装是否仅仅适用于编程公司。比如说,以游戏为例,还是与众不同?

我观看了一段视频,声明它只是简化了代码管理。但是,我仍然不觉得我完全理解这个概念。有人可以用简单的语言向我解释。请注意,我是初学者,不会理解涉及中间代码的示例。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

如果我理解您的要求,您可以将encapsulation视为利用编程语言的data-hiding功能的做法。面向对象的核心原则之一是对象包含对该数据进行操作的数据和方法。封装是数据的一般内化,因此只有对象自己的方法才能修改对象的状态。

答案 1 :(得分:1)

将私有变量与getter和setter结合使用可提供许多优势:

  1. 允许限制对可能敏感的数据的访问
  2. 允许您在设置值时执行操作;例如增加一个计数器
  3. 允许“延迟初始化”;您可以等到设置变量的值,直到调用get方法,这样可以提高性能
  4. 信息隐藏 - 设置或获取课程用户无需知道的值可能涉及某种实现细节