Java 私有修饰符混淆

Java private modifier confusion

我写Java已经有几年了,但我仍然不明白为什么下面这个简单的例子class居然能通过编译。在这种情况下,我会为 myInt 创建一个 getter 方法,并使用该方法从 获取 myInt ]o 在我的 compareTo 方法中,因为 myInt 被声明为 private。有人能告诉我为什么这是访问 omyInt 的合法方式吗?

public class B implements Comparable<B> {

    private int myInt = 0;

    public int compareTo(B o) {
        return myInt-o.myInt;
    }

}

提前致谢!

根据Oracle's Java Tutorial

Access level modifiers determine whether other classes can use a particular field or invoke a particular method.

访问级别设计为class级别,不依赖于实例。

根据Java API:

The private modifier specifies that the member can only be accessed in its own class.

作为 class 始终可以访问其自己的成员。你的代码是允许的,它不会给你的编译错误。

看看这个(把 B 改成 C):

class B implements Comparable<B> {

    private int myInt = 0;

    public int compareTo(C o) {
        return myInt-o.myInt;
    }

}

class C
{
    private int myInt = 0;
}

如果您尝试将 B 更改为 C(另一个 class)。它会给你编译错误。