实现Serializable和扩展Serializable有什么区别?

5
我们在读取JMS队列上的对象消息时遇到了一些错误。似乎这是在对象序列化期间发生的。
我进入我们正在使用的领域库中,对象模型的根类被声明为“extends Serializable”而不是“implements Serializable”...
两种方法有什么区别吗?我通常只看到“implements Serializable”的变体。这会导致我们看到的问题产生副作用吗?
2个回答

7

extends <interface>是预留给接口的。只有接口才能从多个接口继承。类(包括抽象类)只能实现接口。


4

由于Serializable是一个接口,因此只有另一个接口可以扩展它。所有希望使用接口的具体类必须实现它。


如果我在没有显式实现Serializable的子类中看到JMS错误,是否可能是由于对象层次结构中的这个怪癖引起的?它们也从未声明唯一的可序列化ID... - Michael Reynolds
@MichaelReynolds 对象层次结构中的哪个怪癖?如果您的类不可序列化,则在尝试对它们进行序列化时会出现错误。如果您尝试在类中扩展接口,则会收到编译器错误。 - Elliott Frisch
这是我们拥有的一个外部库……比如这样写:class A 扩展 SerializableClass B 扩展 class A我们正在将 class B 放到我们的 JMS 队列中。 - Michael Reynolds
@MichaelReynolds 如果写成 class A extends Serializable 将会得到编译错误。 - Elliott Frisch
这是用于HL7数据的HAPI库,我现在正在源代码中,这里有一个嵌套对象结构,但这是对象继承的根接口: public interface Structure extends Serializable - Michael Reynolds
@MichaelReynolds 是的。那是一个“接口”。不是一个“类”。任何实现“Structure”的东西也都是“Serializable”。 - Elliott Frisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接