Java的私有(private)字段访问

标签 java

<分区>

我很难理解为什么我可以访问 this. 上下文之外的私有(private)字段? 为了澄清,我添加了一个小的 MyClass 示例:

public class MyClass {

    private int myPrivateInt;

    public MyClass(int myPrivateInt) {
        this.myPrivateInt = myPrivateInt;
    }

    public boolean equals(Object obj) {
        // if it's not an instance of MyClass it's obviously not equal
        if (!(obj instanceof MyClass)) return false;
        MyClass myClass = (MyClass) obj;

        // here comes the part I don't quite understand fully:
        // why can I access a private field outside of the "this." context?
        return this.myPrivateInt == myClass.myPrivateInt;
    }
}

这是故意的语言选择还是根本无法区分 this. 上下文和(或多或少)传递给 equals(对象 obj) 方法?

非常感谢您!

最佳答案

您误解了 private 的含义。它不限制对 this 的访问,它限制对 MyClass 中的any 代码的访问。因此 MyClass 中的任何内容都可以访问它,即使它来自 MyClass 的不同实例。

您将能够在 MyClass 之外访问它,例如:

public class MyClass {

    private int myPrivateInt;

    public void example (MyClass m) {
        int x = m.myPrivateInt; // <- OK, we are in MyClass 
    }        

}

public class SomewhereElse {

    public void example (MyClass m) {
        int x = m.myPrivateInt; // <- not allowed
    }

}

关于Java的私有(private)字段访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886039/

相关文章:

java - 两个大小为 100 万的数组中的第一个公共(public)数字

java - 为什么我找不到 ProgressiveMediaSource?

java - Android TabBar 像 Iphone 问题

Java过滤器用户输入问题

java - testng 报告中的“报告器输出”为空

java - 如何以不同的方式打印 getString 的值?

java - 如何在 pojoclass 的帮助下将 JSon 数组转换为 Arraylist?

java - 尝试访问 java 中另一个类中的整数时出现空指针

java - 当我使用 java 添加 float 时,它会添加额外的分数如何避免它们?

java - Fast Scroll In ListView 使用 UniversalImageloader 优化或使用 View 引用