在Java中,为什么私有数据成员可以在class之外访问,如果这样写?

In Java, why are the private data members accessible outside the class if written like this?

通常,如果 type 是名为 Pass 的 class 的 private 成员,并且 obj 是引用对于 Pass class 的对象,我们不能做 obj.type 因为 typeprivate 成员所以会出错。

copy() 方法中,a 作为参数传递,其中 a 是对 Pass 对象的引用。

按照同样的逻辑,我们也不应该被允许做a.type

但是这段代码运行良好。为什么?这是我的疑惑。

public class Main {

    public static void main(String[] args) {
    Pass ob1 = new Pass(10,'c');
    Pass ob2 = new Pass(20,'f');

    ob1.print();
    ob2.print();

    ob1.copy(ob2);

    ob1.print();
    ob2.print();
    }
}

class Pass {
    private int number = 0;
    private char type = 'a';

    public Pass(int i, char t) {
        this.number = i;
        this.type = t;
    }

    public void copy(Pass a) {
        this.number = a.number;
        this.type = a.type;
    }

    public void print() {
        System.out.println(number + " =>" + type);
    }
}

因为方法在同一个class中,所以可以访问其他实例的私有成员。 private only 表示只有 class 中的函数 可以访问它,对哪个对象正在访问没有限制。

有四种类型的 Java 访问修饰符:

  1. Private:private修饰符的访问级别仅在class内。无法从 class.
  2. 外部访问
  3. Default: 默认修饰符的访问级别仅在包内。无法从包外访问它。如果您不指定任何访问级别,它将是默认值。
  4. Protected:protected修饰符的访问级别是包内包外通过childclass。如果不制作childclass,则无法从包外访问。
  5. Public:public修饰符的访问级别无处不在。它可以从 class 内、class 外、包内和包外访问。

在您的例子中,您访问 Pass class 中的 type 变量。所以即使它是一个私有变量,你也有访问它的权限。