方法“可见性” - 顾名思义 - 关于方法和变量对程序员“可见”的地方。作为一个通用契约,即使变量被声明为私有的,并且被该类的实例化对象(而非“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