父类序列化后用子类反序列化接受
时间: 2023-09-01 08:12:05 浏览: 44
在 Java 中,父类序列化后可以使用子类进行反序列化接收。当父类实现了 Serializable 接口并进行了序列化,子类也自动继承了 Serializable 接口。因此,子类对象可以用来接收父类对象的反序列化结果。
以下是一个简单的示例代码:
```java
import java.io.*;
class Parent implements Serializable {
private static final long serialVersionUID = 1L;
String parentName;
public Parent(String parentName) {
this.parentName = parentName;
}
}
class Child extends Parent {
private static final long serialVersionUID = 1L;
String childName;
public Child(String parentName, String childName) {
super(parentName);
this.childName = childName;
}
}
public class SerializationExample {
public static void main(String[] args) {
// 序列化
try {
Child child = new Child("Parent", "Child");
FileOutputStream fileOut = new FileOutputStream("serialization.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(child);
out.close();
fileOut.close();
System.out.println("对象已被序列化并保存到 serialization.ser 文件中");
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化
try {
FileInputStream fileIn = new FileInputStream("serialization.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Child child = (Child) in.readObject();
in.close();
fileIn.close();
System.out.println("对象已从 serialization.ser 文件中反序列化");
System.out.println("父类名称: " + child.parentName);
System.out.println("子类名称: " + child.childName);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
在上述代码中,父类 Parent 实现了 Serializable 接口,子类 Child 继承了 Parent。首先,创建一个 Child 对象并将其序列化保存到文件 serialization.ser 中。然后,从该文件中反序列化 Child 对象,并打印出父类和子类的名称。
运行代码,输出结果为:
```
对象已被序列化并保存到 serialization.ser 文件中
对象已从 serialization.ser 文件中反序列化
父类名称: Parent
子类名称: Child
```
可以看到,通过子类 Child 对象成功接收了父类 Parent 的反序列化结果。