次のシナリオを見てください。
public class ParentClass {
private Integer testVar = 1;
public Integer getTestVar() {
return testVar;
}
public void setTestVar(Integer testVar) {
this.testVar = testVar;
}
}
public class ChildClass extends ParentClass {
private Integer testVar = 2;
@Override
public Integer getTestVar() {
return testVar;
}
@Override
public void setTestVar(Integer testVar) {
this.testVar = testVar;
}
}
public class TestClass {
public static void main(String[] args) {
ChildClass childClass = new ChildClass();
childClass.setTestVar(3);
Gson gson = new Gson();
String str = gson.toJson(childClass);
System.out.println(str);
}
}
ここでは、json変換にcom.google.gson.Gsonパッケージを使用しました。次の出力が得られます。
{"testVar":1}
json文字列に3を期待していましたが、得られたのは、parentClassのtestVar変数によって保持されている値でした。
子のgetTestVarは、親の対応するものをオーバーライドするべきではありませんか?
インスタンスメンバーに直接アクセスしていますか(各クラスのインスタンスメンバーの名前を変更しますが、ゲッターの名前を同じに保つことでこれが証明されます)?
はいの場合、誰でもプライベートメンバーに直接アクセスするにはどうすればよいですか?
編集:私はこの質問を編集しました。このバージョンでは、jsonで親の値のみが表示されます。子のインスタンスメンバーを取得する方法はありますか?