我可以在Java中访问私有变量

时间:2015-05-31 03:22:27

标签: java

someObj.java

public class someObj {
        private int data;

        someObj(int initVal) {
            data = initVal;
        }
        int getAnotherObjectData(someObj bar) {
            return bar.data;
        } 
}

Tester.java

    someObj foo = new someObj(30);
    someObj bar = new someObj(40);
    System.out.println(bar.getAnotherObjectData(foo));

结果,我可以得到'30'。 为什么我可以访问另一个Object的私有变量数据?

1 个答案:

答案 0 :(得分:2)

由于它是同一个类实现,这意味着你自己编写这个类,所以你可以100%控制它。因此,如果您也可以访问相同类型的其他对象,那么这不是问题。在实施equalsclone方法时,此功能非常有用:

public class MyObj {
    private int a;
    private long b;

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        MyObj other = (MyObj) obj;
        if (a != other.a)
            return false;
        if (b != other.b)
            return false;
        return true;
    }
}

如果没有适当的equals实现的字段访问权限,您需要为所有字段设置非私有getter,这在许多情况下可能是不可取的。