interface可以为空??

phonlee 2003-02-27 10:42:25
下面是jdk源代码, 其中接口中什么也没有定义??

请问什么情况下这么干??




/*
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/

package java.io;

/**
* Serializability of a class is enabled by the class implementing the
* java.io.Serializable interface. Classes that do not implement this
* interface will not have any of their state serialized or
* deserialized. All subtypes of a serializable class are themselves
* serializable. The serialization interface has no methods or fields
* and serves only to identify the semantics of being serializable. <p>
*
* To allow subtypes of non-serializable classes to be serialized, the
* subtype may assume responsibility for saving and restoring the
* state of the supertype's public, protected, and (if accessible)
* package fields. The subtype may assume this responsibility only if
* the class it extends has an accessible no-arg constructor to
* initialize the class's state. It is an error to declare a class
* Serializable in this case. The error will be detected at runtime. <p>
*
* During deserialization, the fields of non-serializable classes will
* be initialized using the public or protected no-arg constructor of
* the class. A no-arg constructor must be accessible to the subclass
* that is serializable. The fields of serializable subclasses will
* be restored from the stream. <p>
*
* When traversing a graph, an object may be encountered that does not
* support the Serializable interface. In this case the
* NotSerializableException will be thrown and will identify the class
* of the non-serializable object. <p>
*
* Classes that require special handling during the serialization and deserialization
* process must implement special methods with these exact signatures: <p>
*
* <PRE>
* private void writeObject(java.io.ObjectOutputStream out)
* throws IOException
* private void readObject(java.io.ObjectInputStream in)
* throws IOException, ClassNotFoundException;
* </PRE><p>
*
* The writeObject method is responsible for writing the state of the
* object for its particular class so that the corresponding
* readObject method can restore it. The default mechanism for saving
* the Object's fields can be invoked by calling
* out.defaultWriteObject. The method does not need to concern
* itself with the state belonging to its superclasses or subclasses.
* State is saved by writing the individual fields to the
* ObjectOutputStream using the writeObject method or by using the
* methods for primitive data types supported by DataOutput. <p>
*
* The readObject method is responsible for reading from the stream and restoring
* the classes fields. It may call in.defaultReadObject to invoke
* the default mechanism for restoring the object's non-static and non-transient
* fields. The defaultReadObject method uses information in the stream to
* assign the fields of the object saved in the stream with the correspondingly
* named fields in the current object. This handles the case when the class
* has evolved to add new fields. The method does not need to concern
* itself with the state belonging to its superclasses or subclasses.
* State is saved by writing the individual fields to the
* ObjectOutputStream using the writeObject method or by using the
* methods for primitive data types supported by DataOutput. <p>
*
* Serializable classes that need to designate an alternative object to be
* used when writing an object to the stream should implement this
* special method with the exact signature: <p>
*
* <PRE>
* ANY-ACCESS-MODIFIER Object writeReplace() throws ObjectStreamException;
* </PRE><p>
*
* This writeReplace method is invoked by serialization if the method
* exists and it would be accessible from a method defined within the
* class of the object being serialized. Thus, the method can have private,
* protected and package-private access. Subclass access to this method
* follows java accessibility rules. <p>
*
* Classes that need to designate a replacement when an instance of it
* is read from the stream should implement this special method with the
* exact signatute.<p>
*
* <PRE>
* ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;
* </PRE><p>
*
* This readResolve method follows the same invocation rules and
* accessibility rules as writeReplace.
*
* @author unascribed
* @version 1.17, 02/06/02
* @see java.io.ObjectOutputStream
* @see java.io.ObjectInputStream
* @see java.io.ObjectOutput
* @see java.io.ObjectInput
* @see java.io.Externalizable
* @since JDK1.1
*/
public interface Serializable {
}
...全文
120 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
teddy_huang 2003-02-27
  • 打赏
  • 举报
回复
//shy,说错了,孰能无过?
java.rmi.Remote这个是,标志实现了Remote接口的类可被远程调用
xxycumt 2003-02-27
  • 打赏
  • 举报
回复
可以为空的
hayai 2003-02-27
  • 打赏
  • 举报
回复
谁说runnable是空的了?不是有个run函数吗?不要掏浆糊!!!!
abcnn 2003-02-27
  • 打赏
  • 举报
回复
这个接口本身只是意味着实现它的类可以被串行化,空意味着实现它的类不需要实现任何方法就可以实现串行化了。
bluesmile979 2003-02-27
  • 打赏
  • 举报
回复
标志性接口,实现了他的子类用来向系统声明自己确保某某功能已经在这里实现,可以安全使用

比如你这里提到的,implement了Serializable 的类向系统保证自己实现序列化功能(自己是可序列化的)系统才对你有相关处理,否则就算你的类是“可“序列化的,没有implements这个接口,系统不能对他做序列化处理。
teddy_huang 2003-02-27
  • 打赏
  • 举报
回复
java.io.Serializable和java.lang.Runnable都是这样的
lotofu 2003-02-27
  • 打赏
  • 举报
回复
可以为空。
colors 2003-02-27
  • 打赏
  • 举报
回复
学习到了好东西了
Patrick_DK 2003-02-27
  • 打赏
  • 举报
回复
序列化接口

这是一个典型的Java标志型接口(Flag Interface)

一般不推荐开发人员自己设计这样的接口

这样的接口主要是向JVM提供信息,以确定实现这标志型接口的类可以得到JVM的某些特殊处理

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧