在java中,如果我们在类中实现接口,我们必须为接口中的方法提供实现,但是在Serializable接口的情况下,我们不需要提供实现这些方法出现在Serializable接口中。为什么???
答案 0 :(得分:2)
但是在Serializable接口的情况下我们不需要提供 实现Serializable接口中的方法。为什么???
因为它仅用于标记目的,并且包含 no 方法。
当一个班级是" 标记"使用Serializable
接口,它仅仅意味着它应该/可以序列化/反序列化。
来自Oracle的docs:
不实现此接口的类将不具有任何 他们的状态序列化或反序列化。可序列化的所有子类型 class本身是可序列化的。序列化界面没有 方法或字段和仅用于识别存在的语义 序列化的。强>
来自Wikipedia:
Java中标记接口应用的一个示例 编程语言是Serializable接口。一个类实现 此接口表示其非瞬态数据成员可以 写入ObjectOutputStream。 ObjectOutputStream私有 方法writeObject()包含一系列instanceof测试 确定可写性,其中一个查找Serializable 接口。如果这些测试中的任何一个失败,则该方法抛出一个 NotSerializableException。
例如,如果以下类未使用Serializable
界面标记:
public class Employee implements java.io.Serializable
{
public String name;
...
}
然后,以下序列化代码将失败并显示NotSerializableException
:
Employee e = new Employee();
e.name = "Reyan Ali";
FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in /tmp/employee.ser");
注意到*.ser
文件扩展名,在将序列化的java对象写入文件时使用它。