3

可序列化可继承。特别是如果我有

class A implements Serializable{}

class B extends A{}

B类是可序列化的吗?

4

8 回答 8

2

对给定代码进行了以下检查

boolean b = new B() instanceof Serializable;
System.out.println(b);

返回true

于 2013-05-18T16:07:47.897 回答
2

Yes. This follows from the concept of inheritance in Java. Since A is serializable and B extends A, B is serializalbe.

Note that all non-static non-transient fields of A and B must also contain Serializable objects, otherwise there will be a NotSerializableException at runtime when you try to serialize them.

于 2013-05-18T15:12:21.730 回答
2

Yes, subclass of a Serializable class is also serializable

For more information

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html

http://java.sun.com/developer/technicalArticles/ALT/serialization/

于 2013-05-18T15:13:57.343 回答
0

我同意 Serializable-ness 是继承的,但遇到了问题(尽管很少),偶尔的工具无法识别这一事实。因此,即使它不是必需的,我也会付出额外的努力来将子类声明为实现 Serializable。

于 2013-05-19T01:23:39.593 回答
0

甲骨文教程

接口在 Java 编程语言中还有另一个非常重要的作用。接口不是类层次结构的一部分,尽管它们与类结合使用。Java 编程语言不允许多重继承(本课后面将讨论继承),但接口提供了一种替代方法。

在 Java 中,一个类只能从一个类继承,但它可以实现多个接口。因此,对象可以有多种类型:它们自己的类的类型和它们实现的所有接口的类型。这意味着如果一个变量被声明为接口的类型,它的值可以引用从任何实现该接口的类实例化的任何对象。这将在本课后面的标题为“将接口用作类型”的部分中讨论。

我猜你的意思是如果你有一个函数foo(Serializable ptr)你可以用一个实例来调用它,Class B所以答案是肯定的,那就是想法。

此外,您可以覆盖 A(祖先)实现。

于 2013-05-18T15:32:59.233 回答
0

Yes, if the super class implements serializable, then so do the sub classes.

于 2013-05-18T15:12:36.030 回答
0

如果一个类是可序列化的,那么所有子类都是可序列化的。但是,如果您想防止其超类为 Serializable 的子类可序列化,那也是可能的。

如果你想防止然后使用

NotSerializableException -- 当实例需要具有 Serializable 接口时抛出。序列化运行时或实例的类可以抛出此异常。参数应该是类的名称。

参考官方文档——http : //docs.oracle.com/javase/6/docs/api/java/io/NotSerializableException.html

通过以这种方式使用它,您可以完成此任务

private void writeObject(ObjectOutputStream out) throws IOException {

    throw new NotSerializableException(“Not today!”);
}


private void readObject(ObjectInputStream in ) throws IOException {

    throw new NotSerializableException(“Not today!”);

}

子类如何序列化但父类没有

如果一个子类是可序列化的,那绝对不代表它的超类也是可序列化的。当子类被反序列化时,超类的无参数构造器将运行。

于 2013-05-18T15:22:56.130 回答
0

基类实现的所有接口都由其派生类继承。不仅仅是可序列化的。

于 2013-05-19T01:21:38.727 回答