你能解释一下关于封装的事吗?

Moa*_*ini 17 language-agnostic oop encapsulation

回答什么是你最长的编程假设,结果是不正确的?问题,其中一个错误的假设是:

私有成员变量对实例是私有的,而不是类.

(链接)

我无法理解他正在谈论的内容,任何人都可以用一个例子来解释这是错误/正确的吗?

Gre*_*zky 35

public class Example {
  private int a;

  public int getOtherA(Example other) {
    return other.a;
  }
}
Run Code Online (Sandbox Code Playgroud)

像这样.如您所见,private不保护实例成员不被另一个实例访问.

顺便说一句,只要你有点小心,这并不是坏事.如果private不像上面的例子那样工作,那么编写equals()和其他类似的方法会很麻烦.

  • 假设使用`private`是一种保护外部实体不直接访问实现的手段.因为这是同一个类,所以我们假设当我们直接访问其他实例的私有成员时,我们知道我们正在做什么.如上所述,这是一件好事:`equals()`,复制构造函数(浅拷贝/克隆,无论你想要什么),都需要熟悉同一个类的另一个实例来完成它们的工作. (8认同)
  • 这样私有成员是该类的私有成员,并且实例可以访问另一个实例的私有成员,对吗? (3认同)