从同一类的不同实例访问私有方法

Roh*_*rya 2 java oop installation access-modifiers instance-variables

我刚刚遇到了一段代码。在一种情况下,我无法使用其实例访问类的私有成员(这很好),但在其他情况下,我能够使用其不同的实例访问私有成员(属于同班)。谁能解释一下为什么会发生这种情况?

 class Complex {
    private double re, im; 
    public String toString() {
        return "(" + re + " + " + im + "i)";
    }
    Complex(){}

/*Below c is different instance, still it can access re,im( has a private access) 
  without any error.why? */

    Complex(Complex c) {
        re = c.re;
        im = c.im;
    }
}

public class Main {
    public static void main(String[] args) {
        Complex c1 = new Complex();
        Complex c2 = new Complex(c1);
        System.out.println(c1.re);  /* But getting an error here , 
        which is expected as re and im has a private access in Complex class.*/
    }
}
Run Code Online (Sandbox Code Playgroud)

Vil*_*nen 5

您可以从同一类中定义的任何代码块访问私有成员。实例是什么并不重要,或者即使有任何实例(代码块位于静态上下文中)也并不重要。

但是您无法从不同类中定义的代码访问它们。

您的第一个引用位于同一个类中,Complex这就是它起作用的原因。第二个是在不同的类中,Main这就是它不起作用的原因。