当我序列化抽象类时,继承的子类也会被序列化吗?这是否包括抽象类及其子类的成员?
public abstract class RootClass implements Serializable{
Object data;
}
public class SubClassA extends RootClass{
Object dataA;
}
public class SubClassB extends RootClass{
Object dataB;
}现在,当我实例化类SubClassA和SubClassB并序列化这些实例时,这是可能的吗?
它会包含子类和根类的成员吗?
发布于 2010-10-27 12:56:21
不确定我是否理解了这个问题。不管怎样,我会试着回答的。
当您声明一个抽象类Serializable时,此接口也会被子类继承,因此它们被认为是可序列化的,并且还必须使其可序列化(如果您什么都不做,默认的序列化机制将应用于它,这可能会工作,也可能不会工作)。
您只序列化对象实例,而不序列化类。
默认序列化也会序列化父类的字段,但前提是父类也是可序列化的。如果不是,则不序列化父状态。
如果您序列化一个抽象类的子类的对象,并且该抽象类是可序列化的,那么该抽象父类中的所有字段也将被序列化(通常的例外情况适用,例如瞬态或静态字段)。
发布于 2010-10-27 12:53:14
序列化是为了“对象”和保存它们的状态,而不是为了类。由于您不能为抽象类创建实例,因此在一开始就没有必要讨论它们是否可以序列化。
发布于 2010-10-27 13:14:12
当您实例化某个类的对象时,其数据由两部分组成:由其类定义的字段和由超类定义的字段。请注意,并不是所有继承的字段都是可访问的,只有那些定义为protected或public (或在同一个包中时未修改)的字段才是可访问的。
如果对象的类是Serializable,它的字段将被序列化(除非标记为transient),继承的字段也是如此。在本例中,SubClassA的实例将同时包含‘Serializable’和'dataA',而且因为类和子类都是数据,所以这两个字段都将被序列化。反序列化后,这两个字段都应该是可访问的。
https://stackoverflow.com/questions/4030047
复制相似问题