如果我在超类中有默认的serialVersionUID,则serialVersionUID是否由子类继承

use*_*110 6 java serialization

serialVersionUID由子类继承,如果我有默认serialVersionUID的超?类似于超类是可序列化的,那么子类也是可序列化的.

我最初有一个没有默认值的超类,serialVersionUID所以我得到了:

local class incompatible: stream classdesc serialVersionUID = -3473908186986930430, 
local class serialVersionUID = -7527159820765531130
Run Code Online (Sandbox Code Playgroud)

所以我把它添加到超类:

private static final long serialVersionUID = 1L;
Run Code Online (Sandbox Code Playgroud)

我的问题是:序列化是否serialVersionUID在序列化子类时考虑来自超类.我是否需要serialVersionUID 明确指定每个子类?

use*_*421 9

如果我在超类中有默认的serialVersionUID,那么serialVersionUID是否由子类继承?

是的,它是继承的,但不,序列化不会将其视为属于子类而不使用它.

类似于超类是可序列化的,那么子类也是可序列化的.

它不相似.Serializable是一个接口,它只受语言规则的约束.serialVersionUID是一个特殊的领域,有自己的规则强制执行ObjectInputStream.

  • `序列化不会认为它属于子类而不使用它.你能澄清最后一点:`而不是使用它`?你的意思是ObjectInputStream不会使用超类的serialVersionUID吗? (3认同)
  • “继承”在这一点上令人困惑。`serialVersionUID`是`private`,那么它如何被继承(即在子类中可见)?序列化很可能是向上遍历类树,通过*反射*找到最接近的具有`serialVersionUID`的类(因此可以克服Java语言中的可见性和继承性原则)。从您的答案中不清楚如果实现“Serialized”的类的子类没有“private [...]serialVersionUID”会发生什么:序列化失败还是从超类获取uid? (2认同)