从结果中可以看到,JSONObject对Test对象进行序列化时,把fileName也当做属性了。
原因:涉及到JavaBean规范(参考:https://www.cnblogs.com/yusiming/p/9780726.html)。
JavaBean必须要为成员提供get/set方法,只提供其中的一个也是可以的,必须要有一个无参构造器,一般对于具有get或这个set方法的成员我们称之为属性,就算一个属性,没有对应的成员变量只有get/set方法,也是可以的。
因为在接口中定义了一个get开头的方法,在父类中实现了该方法,导致JSONObject在序列化时将filenName当做属性看待
1 import com.alibaba.fastjson.JSONObject; 2 3 public class main { 4 5 6 public static void main(String[] args){ 7 8 Test t=new main().new Test(); 9 System.out.println(JSONObject.toJSONString(t)); 10 11 12 } 13 public interface a{ 14 public String getFileName(); 15 } 16 17 18 public class base implements a{ 19 @Override 20 public String getFileName(){ 21 System.out.println("5555555555555"); 22 return "111111111111"; 23 } 24 } 25 26 public class Test extends base{ 27 public String a="0"; 28 public String b="1"; 29 public String c="2"; 30 } 31 32 }
结果:
1 5555555555555 2 {"a":"0","b":"1","c":"2","fileName":"111111111111"}