访问修饰符在封装中有什么作用吗?

3

这里有一个类 Encapsulate,它有一个公共属性和一个公共方法。

class Encapsulate
{
  public int a;
  public int b;

  public static void main(String...s)
  { 
    Encapsulate e = new Encapsulate();
    e.setVar(10,20);
    System.out.println(e.getSome());
  }

  public void setVar(int a, int b)
  {
    this.a = a;
    this.b = b;
  }

  public int getSome()
  {
    return a + b;
  }
}

这里是否遵循OOP概念“封装”?
我相信它适用,因为两者都绑定在一个类中,也许我们可以称其为弱封装,但确实有封装。
但我不知道如何证明它,因为我的搜索结果显示类属性应该是私有的。
更新:如果使用默认访问修饰符呢?

我不确定这是否正确,但通常我会说“数据隐藏”和“封装”是相关的,但并不相同。 - meskobalazs
这可能很有趣:http://programmers.stackexchange.com/questions/173547/what-is-the-difference-between-data-hiding-and-encapsulation - meskobalazs
如果我使用公共访问修饰符来绑定属性和方法,它们仍然会被隐藏在其他类之外并绑定在一起(这就是封装的含义),除非其他类实例化它们或扩展它们。 - Himanshu Bhandari
这可能是 https://dev59.com/t3NA5IYBdhLWcg3wS7wm 的重复问题。那个问题的 第一个 答案很可能已经回答了你的问题。在发布新问题之前,请使用该网站的搜索功能。 - Raedwald
@ Raedwald:感谢您提供的信息,但我已经知道了。您提供的链接并没有回答我的问题,至少我没有找到我想要的答案。 - Himanshu Bhandari
我已经更新了我的问题,请打开它以获取答案。 - Himanshu Bhandari
2个回答

3
这是另一个说明封装是隐藏数据的例子。
软件对象与现实世界对象在概念上相似:它们都包含状态和相关行为。对象将其状态存储在字段中(某些编程语言中的变量),并通过方法(某些编程语言中的函数)公开其行为。方法操作对象的内部状态,并作为对象间通信的主要机制。隐藏内部状态并要求所有交互通过对象的方法执行被称为数据封装——面向对象编程的基本原则。
这基本意味着您应将属性的访问修饰符更改为私有,并允许通过方法访问属性。
引用自 https://docs.oracle.com/javase/tutorial/java/concepts/object.html

1
我不同意。封装是指只能由同一对象上的方法操作的隐藏数据,这就是封装的意义:
Java中的封装是将数据(变量)和操作数据的代码(方法)作为单个单元一起包装的机制。在封装中,类的变量将被隐藏在其他类中,并且只能通过其当前类的方法访问,因此也称为数据隐藏。
看这里,已经正确解释了。 http://www.tutorialspoint.com/java/java_encapsulation.htm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接