Java私有修饰符混淆

时间:2015-03-01 20:11:26

标签: java accessor private-members

我已经写了几年Java了,但我仍然不明白为什么这个简单的示例类实际上通过了编译。在这种情况下,我会为 myInt 制作一个getter方法,并使用该方法从我的 compareTo中的 o 中获取 myInt 方法,因为 myInt 被声明为私有。有人可以告诉我为什么这是一种合法的方式来访问 o myInt

public class B implements Comparable<B> {

    private int myInt = 0;

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

}

提前致谢!

2 个答案:

答案 0 :(得分:3)

根据Oracle's Java Tutorial

  

访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法。

访问级别是在类级别设计的,并不依赖于实例。

答案 1 :(得分:1)

根据Java API:

  

private修饰符指定只能在自己的类中访问该成员。

因为班级总是可以访问自己的成员。您的代码是允许的,它不会给出编译错误。

看看这个(将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(另一个类)。它会给你编译错误。