方法「可見性」 - 顧名思義 - 關於方法和變量對程序員「可見」的地方。作爲一個通用契約,即使變量被聲明爲私有的,並且被該類的實例化對象(而非「this」)引用,類中定義的變量總是在類定義內可見。
有關可見性和封裝的規則在設計上是爲了幫助確保程序員不會意外地訪問會意外破壞功能的變量和方法。例如,你打破了java.util.Random是如何工作的,如果你要手動調用
private static long seedUniquifier() {
// L'Ecuyer, "Tables of Linear Congruential Generators of
// Different Sizes and Good Lattice Structure", 1999
for (;;) {
long current = seedUniquifier.get();
long next = current * 181783497276652981L;
if (seedUniquifier.compareAndSet(current, next))
return next;
}
}
(從Sun JDK源代碼源)
然而,碼範圍內接觸你寫的時候,一般認爲調用被定義爲該類的類型的對象上的私有變量/方法是可以的,因爲假定作爲相關代碼的程序員和編寫者,你擁有必要的權限,代理和專業知識正確管理代碼。
所以一般來說,不管變量是否被聲明爲private或沒有,下面的代碼:
public class Test {
private float internalValue;
public boolean isBigger(Test t) {
return internalValue > t.internalValue;
}
}
始終有效。
另請參閱https://groups.google.com/d/msg/java-lang-fans/KVmmgeSCHkA/7nAQolGcsjwJ – ZhongYu