可序列化可继承。特别是如果我有
class A implements Serializable{}
class B extends A{}
B类是可序列化的吗?
可序列化可继承。特别是如果我有
class A implements Serializable{}
class B extends A{}
B类是可序列化的吗?
对给定代码进行了以下检查
boolean b = new B() instanceof Serializable;
System.out.println(b);
返回true
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.
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/
我同意 Serializable-ness 是继承的,但遇到了问题(尽管很少),偶尔的工具无法识别这一事实。因此,即使它不是必需的,我也会付出额外的努力来将子类声明为实现 Serializable。
接口在 Java 编程语言中还有另一个非常重要的作用。接口不是类层次结构的一部分,尽管它们与类结合使用。Java 编程语言不允许多重继承(本课后面将讨论继承),但接口提供了一种替代方法。
在 Java 中,一个类只能从一个类继承,但它可以实现多个接口。因此,对象可以有多种类型:它们自己的类的类型和它们实现的所有接口的类型。这意味着如果一个变量被声明为接口的类型,它的值可以引用从任何实现该接口的类实例化的任何对象。这将在本课后面的标题为“将接口用作类型”的部分中讨论。
我猜你的意思是如果你有一个函数foo
,(Serializable ptr)
你可以用一个实例来调用它,Class B
所以答案是肯定的,那就是想法。
此外,您可以覆盖 A(祖先)实现。
Yes, if the super class implements serializable, then so do the sub classes.
如果一个类是可序列化的,那么所有子类都是可序列化的。但是,如果您想防止其超类为 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!”);
}
子类如何序列化但父类没有
如果一个子类是可序列化的,那绝对不代表它的超类也是可序列化的。当子类被反序列化时,超类的无参数构造器将运行。
基类实现的所有接口都由其派生类继承。不仅仅是可序列化的。