Java 为什么谷歌';s JSON转换器“;GSON“;不';不遵循方法优先于骑行概念?

Java 为什么谷歌';s JSON转换器“;GSON“;不';不遵循方法优先于骑行概念?,java,json,overriding,gson,Java,Json,Overriding,Gson,请看一下以下场景: public class ParentClass { private Integer testVar = 1; public Integer getTestVar() { return testVar; } public void setTestVar(Integer testVar) { this.testVar = testVar; } } public class ChildClass e

请看一下以下场景:

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);
    }
}
这里,我使用了com.google.gson.gson包进行json转换。它给出以下输出:

{“testVar”:1}

我期望json字符串中包含3,但得到的是parentClass的testVar变量所持有的值

  • 孩子的getTestVar不应该超过父母的getTestVar吗

  • 实例成员是否被直接访问(更改每个类的实例成员的名称,但保持getters名称不变可以证明这一点)

  • 如果是,任何人如何直接访问私人成员

  • 编辑:我已经编辑了这个问题。此版本仅在json中显示父级的值。有没有办法获取孩子的实例成员

  • 是的

  • 是的,Gson直接访问字段。执行类似任务的其他库通常允许您在字段和属性(即使用getter和setter)访问之间进行选择,但Gson只支持字段访问

  • 私有字段对于常规代码是不可访问的,但是在某些特殊情况下(如序列化/反序列化),直接访问它们是完全合理的。这就是为什么可以使用反射访问私有字段(请参阅)