例として、メンバー変数として String を入れています。ただ、もともと複雑な構造があります。
public class ClassA {
private final String test ;
public ClassA(String str) {
test = str;
}
@Override public int hashCode() {
return test.hashCode();
}
@Override public boolean equals(Object obj) {
return obj instanceof ClassA && test.equals(((ClassA)obj).test);
}
}
public class ClassB {
public static void main(String args[])
{
ClassA obj1 = new ClassA("abc");
ClassA obj2 = new ClassA("def");
obj1.equals(obj2);
obj2.test;//not valid
}
}
私が知っていることから、 のプライベート変数へのアクセスtest
はobj1
ClassA のメソッド内にのみ存在し、これらのメソッドは のコンテキストから呼び出す必要がありますobj1
。
obj2 のテスト変数を呼び出すとobj1.equals(obj2)
、obj1 のコンテキストからアクセスできます。
そのため、ClassA メソッド内から ClassA 型の任意のオブジェクトのプライベート変数にアクセスできます。