Java 私有修饰符混淆
Java private modifier confusion
我写Java已经有几年了,但我仍然不明白为什么下面这个简单的例子class居然能通过编译。在这种情况下,我会为 myInt 创建一个 getter 方法,并使用该方法从 获取 myInt ]o 在我的 compareTo 方法中,因为 myInt 被声明为 private。有人能告诉我为什么这是访问 o 的 myInt 的合法方式吗?
public class B implements Comparable<B> {
private int myInt = 0;
public int compareTo(B o) {
return myInt-o.myInt;
}
}
提前致谢!
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)。它会给你编译错误。
我写Java已经有几年了,但我仍然不明白为什么下面这个简单的例子class居然能通过编译。在这种情况下,我会为 myInt 创建一个 getter 方法,并使用该方法从 获取 myInt ]o 在我的 compareTo 方法中,因为 myInt 被声明为 private。有人能告诉我为什么这是访问 o 的 myInt 的合法方式吗?
public class B implements Comparable<B> {
private int myInt = 0;
public int compareTo(B o) {
return myInt-o.myInt;
}
}
提前致谢!
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)。它会给你编译错误。