在Java中,私有变量对整个类都是可见的。可以从静态方法和同一类的其他实例访问它们。
例如,这在工厂方法中很有用。工厂方法通常对一个对象进行初始化,因为它是如此复杂,以至于您不想将它们留给应用程序代码。为了进行初始化,factory方法通常需要访问您不想公开的类内部。能够直接访问私有变量使您的生活更加轻松。
但是,当您甚至想从静态方法或该类的其他实例中隐藏类的实现细节时,可以遵循私有类数据模式。将类的所有私有变量放入私有内部类中,并将任何获取器或设置器委派给该内部类的获取器和设置器。
另一个选择是为类定义一个接口,该接口声明该类的所有公共方法,然后仅在可能的情况下在该接口下引用该类。对interface-type的引用无论在何处都不能用于直接访问未在接口中声明的任何内容(当然,除了反射之外)。当您使用没有接口的面向对象的编程语言(例如C ++)时,可以使用由实际类继承的抽象基类来模拟它们。
interface ITest {
public int getA();
}
class Test implements ITest {
private int a = 5;
public int getA() { return a; } // implementation of method declared in interface
public static void main(){
ITest t = new Test();
t.a = 1; // syntax error: Interface ITest has no "a"
System.out.println(t.getA()); // calls Test.getA, visible because ITest declares it
}
}
equals
必须检查另一个实例的私有字段。(由于简短,因此发表评论,而这种方法的面向对象