说我有一个界面和一个对象:
public interface MyInterface {
public String getStringOne();
}
public class MyObject implements MyInterface {
private final String stringOne = "string1";
private final Image myGiganticImage; // loads from disk in the constructor
// Getters for both would follow
}
如果我在通过网络发送MyObject之前将其转发到MyInterface,会传输什么?
public class MyService {
private final MyObject data = new MyObject();
public MyInterface getData() {
return data;
}
}
具体来说,myGiganticImage
是否通过电汇发送?
答案 0 :(得分:5)
显然MyObject
的状态是序列化的。 public MyInterface getData()
只是强制getData()
返回的类型是MyInterface
。
答案 1 :(得分:1)
向上转换不会改变对象的内容。
答案 2 :(得分:0)
向上转换只是一种改变指针类型的方法。无论指针类型如何,JVM堆上都保留相同的数据结构。这种结构实际上并不关心你指向它的方式。
当您序列化对象系统(可能)时,会询问您的对象是否为类(getClass()),然后使用反射读取此类中的所有字段。 即使您使用 Object 指向它,对象也会始终报告其类。
系统将始终从类中读取字段,因为它是java获取字段列表的唯一方法:向对象请求类,而不是向类请求字段。
如果您想转移对象的父级,您可以尝试我的解决方案:Deserialize remote object to the narrowest accessible class