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



通常,如果type是名为Pass的类的private成员,而obj是对Pass类的对象的引用,则我们不能执行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);
}
}

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

  1. Private:私有修饰符的访问级别仅在类中。不能从类外部访问它
  2. 默认:默认修饰符的访问级别仅在包中。无法从程序包外部访问它。如果您没有指定任何访问级别,它将是默认级别
  3. 受保护:受保护修饰符的访问级别在包内,通过子类在包外。如果不生成子类,则无法从包外部访问它
  4. Public:公共修饰符的访问级别无处不在。它可以从类内、类外、包内和包外访问

在您的情况下,您可以访问Pass类中的type变量。因此,即使它是一个私有变量,你也有权访问它

因为该方法在同一个类中,所以它可以访问其他实例的私有成员。private仅意味着只有类中的函数才能访问它,而不限制哪个对象正在进行访问。

最新更新