编写以下代码时,编译器如何不抱怨?
public class MyClass
{
private int count;
public MyClass(int x){
this.count=x;
}
public void testPrivate(MyClass o){
System.out.println(o.count);
}
}
Run Code Online (Sandbox Code Playgroud)
即使它是testPrivate写入的同一个类的实例,它不应该给出编译错误System.out.println(o.count)吗?毕竟,我试图直接访问私有变量.
代码甚至运行良好.
Era*_*ran 57
私有成员可以从声明它的类中的任何方法访问,无论该方法是访问其自己的(this)实例的私有成员还是某个其他实例的私有成员.
这在JLS 6.6.1中说明:
...否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.
Java的这一特性允许您编写接受类实例作为参数的方法(例如 - clone(Object other),compareTo(Object other)),而不依赖于具有所有需要访问的私有属性的非私有getter的类.
Sim*_*mba 12
私有字段作为整体对于类是私有的,而不仅仅是对象.
其他类不知道MyClass有一个名为count的字段; 但是,MyClass对象知道另一个MyClass对象具有count字段.
存取器不安全!它们是封装,以防止其他人不必了解代码.
考虑是否有人写了一个Quantum Bogo Sort,但是一旦他撤消了最后一个bug就消失了 - 理解这个代码会导致一个人从宇宙中被删除或发疯.
尽管有这个小缺点,如果适当封装,这应该成为您首选的排序算法,因为除Sort之外的所有字段和方法都应该是私有的.
你不知道它是如何工作的,你不想知道它是如何工作的,但是它有效,这就足够了.另一方面,如果一切都是公开的,你必须了解它如何正确地使用它 - 这太麻烦了,我会坚持使用quicksort.
| 归档时间: |
|
| 查看次数: |
6245 次 |
| 最近记录: |