Java 接口实现概念

Java 接口实现概念,java,interface,serializable,Java,Interface,Serializable,在java中,如果我们在类中实现接口,我们必须提供接口中存在的方法的实现。但是在可序列化接口的情况下,我们不需要提供可序列化接口中存在的方法的实现。为什么 但在可序列化接口的情况下,我们不需要提供 序列化接口中存在的方法的实现。为什么 因为它仅用于标记目的,不包含要实现的方法 当一个类用可序列化接口“标记为””时,这仅仅意味着它应该/可以序列化/反序列化 从Oracle的: 未实现此接口的类将不具有任何 它们的状态已序列化或反序列化。可序列化文件的所有子类型 类本身是可序列化的。序列化接口没有

在java中,如果我们在类中实现接口,我们必须提供接口中存在的方法的实现。但是在可序列化接口的情况下,我们不需要提供可序列化接口中存在的方法的实现。为什么

但在可序列化接口的情况下,我们不需要提供 序列化接口中存在的方法的实现。为什么

因为它仅用于标记目的,不包含要实现的方法

当一个类用
可序列化接口“标记为””时,这仅仅意味着它应该/可以序列化/反序列化

从Oracle的:

未实现此接口的类将不具有任何 它们的状态已序列化或反序列化。可序列化文件的所有子类型 类本身是可序列化的。序列化接口没有 方法或字段和仅用于标识存在的语义 可序列化。

和来自:

Java中标记接口的应用示例 编程语言是可串行化的接口。一个类实现 此接口用于指示其非瞬态数据成员可以 写入ObjectOutputStream。ObjectOutputStream是私有的 方法writeObject()包含一系列要执行的测试的实例 确定可写性,其中一个查找可序列化 接口。如果这些测试中的任何一个失败,该方法将抛出 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对象写入文件时使用该扩展名。

可序列化接口不包含任何方法。我在想TL;DR版本是因为序列化数据的需要出现在Java有注释之前。如果您今天要这么做,您可能会使用注释,就像JPA使用@Entity一样,但是更改它会破坏所有代码。我真的想知道marker接口在内部是如何工作的?