接口实现概念

时间:2014-05-26 13:49:02

标签: java interface serializable

在java中,如果我们在类中实现接口,我们必须为接口中的方法提供实现,但是在Serializable接口的情况下,我们不需要提供实现这些方法出现在Serializable接口中。为什么???

1 个答案:

答案 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对象写入文件时使用它。