覆盖Android中未调用的方法

时间:2016-03-05 10:30:27

标签: java android json jsonobject method-overriding

我有一个类VisitMapper.java,它从JSONObject类扩展而来。在VisitMapper.java课程中,我重写了JSONObject课程getString()getJSONObject()的两种方法。这是我的代码:

VisitMapper.java

 public final class VisitMapper extends JSONObject{

        private static final String DISPLAY_KEY = "display";

        private VisitMapper() {
        }

        public static Visit map(JSONObject jsonObject) throws JSONException {
            Visit visit = new Visit();
            visit.setUuid(jsonObject.getString("uuid"));
            visit.setVisitPlace(jsonObject.getJSONObject("location").getString(DISPLAY_KEY));
            visit.setVisitType(jsonObject.getJSONObject("visitType").getString(DISPLAY_KEY));
            visit.setStartDate(DateUtils.convertTime(jsonObject.getString("startDatetime")));
            visit.setStopDate(DateUtils.convertTime(jsonObject.getString("stopDatetime")));

            return visit;
        }

        @Override
        public String getString(String name) throws JSONException {
            String tempName = "";
            System.out.println("getString() is being called: "+name);
            if (this.has(name) && !this.isNull(name)){

                tempName = super.getString(name);
            }
            return tempName;
        }

        @Override
        public JSONObject getJSONObject(String name) throws JSONException {
            JSONObject tempObject = null;
            System.out.println("getJSONOBJECT() is being called");
            if (this.has(name) && !this.isNull(name)){

                tempObject = super.getJSONObject(name);
            }
            if (tempObject==null){

            }
            return tempObject;
        }
    }

我检查了我的logcat,没有打印System.out.println()次来电。我经历了这种类型的一些问题,他们提到方法不应该是静态的,也不应该是本地的,它们不应该是私有的。你必须继承父类等。使用这两种方法没有这种问题。我从JSONObject.java继承了我的java类。我无法理解我错在哪里。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果JsonObject的实例是VisitMapper(map(JsonObject jsonObject)),则JsonObject json = new VisitMapper()中的Json对象将仅使用您覆盖的方法。

如果JsonObject的实例本身(JsonObject json = new JsonObject()),方法getStringgetJsonObject将来自JsonObject.class

要检查对象的实例,可以写:

if(jsonObject instanceof VisitMapper){
    //here you can access your override methods
} else if (jsonObject instanceof JsonObject) {
    //here you cannot access your override methods
}

<强>更新

添加Jon Skeet提供的关于多态性的链接:https://docs.oracle.com/javase/tutorial/java/IandI/override.html