2

看看以下场景:

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 变量所持有的值。

  1. 孩子的 getTestVar 不应该覆盖父母的对手吗?

  2. 是否直接访问实例成员(更改每个类的实例成员的名称,但保持 getter 名称相同证明了这一点)?

  3. 如果是,任何人如何直接访问私人成员?

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

4

1 回答 1

3
  1. 是的,它确实

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

  3. 私有字段旨在使常规代码无法访问,但在某些特殊情况下(例如序列化/反序列化),直接访问它们是完全合理的。这就是您可以使用反射访问私有字段的原因(请参阅 参考资料AccessibleObject)。

于 2012-06-25T17:40:13.167 回答