可序列化是否可继承。特别是如果我有
class A implements Serializable{}
class B extends A{}
B类可序列化吗?
答案 0 :(得分:2)
是。这源于Java中的继承概念。由于A是可序列化的,B扩展为A,因此B是serializalbe。
请注意,A和B的所有非静态非瞬态字段也必须包含Serializable对象,否则在尝试序列化时会在运行时出现NotSerializableException。
答案 1 :(得分:2)
是的,Serializable类的子类也是可序列化的
了解更多信息
http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html
http://java.sun.com/developer/technicalArticles/ALT/serialization/
答案 2 :(得分:2)
对以下代码进行了以下检查
boolean b = new B() instanceof Serializable;
System.out.println(b);
返回true
答案 3 :(得分:0)
是的,如果超类实现serializable,那么子类也是如此。
答案 4 :(得分:0)
如果一个类是Serializable,那么所有子类都是Serializable。但是如果你想阻止其超类是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!”);
}
如何对子类进行序列化但是父类不是
如果Sub类是Serializable,那绝对不意味着它的超类也是Serializable。当子类被反序列化时,超类的无参数构造函数将运行。
答案 5 :(得分:0)
接口在Java编程中扮演另一个非常重要的角色 语言。但是,接口不是类层次结构的一部分 他们与班级合作。 Java编程语言 不允许多重继承(继承将在后面讨论 在本课中),但接口提供了另一种选择。
在Java中,一个类只能从一个类继承,但它可以实现 多个界面。因此,对象可以有多种类型: 他们自己的类的类型和所有接口的类型 他们实施。这意味着如果声明变量是 接口的类型,其值可以引用任何对象 从任何实现接口的类实例化。这是 本课程稍后将在标题为“使用a 接口作为类型。“
我想你的意思是如果你有一个函数foo
获得(Serializable ptr)
,你可以用Class B
的实例调用它,所以答案是肯定的,那就是理念
此外,您可以覆盖A(祖先)实现。
答案 6 :(得分:0)
基类实现的所有接口都由其派生类继承。不仅仅是Serializable。
答案 7 :(得分:0)
我同意Serializable-ness是继承的,但是偶然的工具无法识别这个事实(尽管很少)。所以,即使它不是必需的,我也会额外努力将子类声明为实现Serializable。