【问题标题】:Can you help me understand encapsulation please (Beginner)?你能帮我理解封装吗(初学者)?
【发布时间】:2014-07-18 00:44:44
【问题描述】:

我一直在使用一本迄今为止非常出色的 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 height; (即时变量) 我们不应该说 object.height = 0; (“对象”是一个随机参考变量)。在我的小程序中,它只是一条狗的高度,有一个简单的限制。这并不意味着有意义,但我只是试图理解这个概念。当程序员需要使用彼此的代码时,封装只是用于编程公司。比如说,做一个游戏还是有什么不同?

我还观看了一个视频,它还指出它只是让代码更易于管理。但是我仍然不觉得我完全理解这个概念。有人可以简单地向我解释一下。请注意,我是初学者,不会理解涉及中间代码的示例。

感谢您的帮助。

【问题讨论】:

  • 我发现 getter setter 的唯一作用是在 java beans en.wikipedia.org/wiki/JavaBeans
  • 哈哈我猜我在推它。也许只知道它的主要用途就足够了:) 简单?隐藏代码?也许这两个?
  • 你有特定的内置标签,如果你使用了正确的 getter/setter,可以节省你的时间。只要定义它们应该的样子,jsp 会做剩下的事情。你不能在 jsp 中逃避它们,但是对于普通编程,您可以按照自己的方式定义函数
  • Niang - 谢谢你的链接,这对我很有帮助。

标签: java oop encapsulation setter getter


【解决方案1】:

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

【讨论】:

  • 谢谢。这对我来说很有意义。
  • 此外,考虑到一个对象暴露给进程内(例如同一个 JVM)或进程外(例如通过 Web 服务的间接访问)的其他对象使用,上述概念很重要,因为它确保了给开发人员定义明确的合同。基本上,这是一个独立的单元,如果您愿意以分层的方式鼓励团队协作。
【解决方案2】:

将私有变量与 getter 和 setter 一起使用提供了许多优势:

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

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 1970-01-01
    • 2011-04-02
    • 2012-06-05
    • 2014-10-13
    • 2011-02-19
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多