我刚开始讨论这个话题。我的理解是说,如果你想保存一个类的实例变量,以便以后可以使用...你可以使用“serializable”接口,没有定义方法...... 但我怀疑,继承中会发生什么...假设我的超类不是序列化的子类被序列化...我可以保存我的超类实例变量吗? 虽然,我知道这一点......超级类的构造函数正在被调用,但它会运行......但是dat意味着什么?这是否意味着,我无法保存超类的实例变量....
在下面的程序中...创建的文件将存储数值(43,43)或只是变量“height”和“weight”???
import java.io.*;
class A {
String sex;
public void gone(String sex){
this.sex = sex;
System.out.println("i m " + sex);
}
}
public class serialio1 extends A implements Serializable {
int height;
int weight;
public static void main(String[] args){
serialio1 myBox = new serialio1();
myBox.go(43,23);
try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
FileInputStream fileStream = new FileInputStream("foo.ser");
ObjectInputStream ms = new ObjectInputStream(fileStream);
Object one = ms.readObject();
Object two = ms.readObject();
int h = (int) one;
int w = (int) two;
ms.close();
System.out.println("saved values" + h + w);
} catch(Exception ex){
ex.printStackTrace();
}
}
public void go(int height , int weight) {
this.height = height;
this.weight = weight;
System.out.println(" height is " + height);
System.out.println(" weight is " + weight);
}
}
答案 0 :(得分:1)
如果您可以从子类访问超类字段,则可以实现自定义序列化
class X {
int x;
}
class Y extends X implements java.io.Serializable {
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(x);
}
private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
in.defaultReadObject();
x = in.readInt();
}
}
答案 1 :(得分:1)
假设我的超类没有序列化,那么子类被序列化...我可以保存我的超类实例变量吗?
是的,但您必须编写额外的代码,如Evgeny的回答所示。
虽然,我知道这一点......超级类的costructor正在调用它会运行......但是dat意味着什么?这是否意味着,我无法保存超类的实例变量....
我真的无法理解这一点,但如果你只是重复你之前的问题,答案也是一样的。
在下面的程序中...创建的文件将存储数值(43,43)或只是变量“height”和“weight”???
我也无法理解这一点。这不是问题。它将存储您传递给writeObject(),
的对象,这将是您从readObject().
返回的内容。在您的情况下,是serialio1
对象,而不是整数。