我有一个界面 A ,并且该界面的实现 AImpl
接口有1种方法,该方法在 AImpl 中实现。 实现 AImpl 的成员很少,没有serialVersionUID。
问题会发生什么,如果将新的默认方法添加到接口 A 而不在 AImpl 中覆盖它?我在这里休息了吗?我会得到相同的序列化/反序列化结果吗?
答案 0 :(得分:2)
不仅方法没有序列化,接口也没有序列化。
序列化的目的是写入与对象关联的数据,而不是其行为(除非也将其明确编码为数据,例如GregorianCalendar的TimeZone)
无法查看序列化对象中类具有的接口或方法,因此更改它们无效。
(您可能会推断出仅用于序列化的方法)
Java序列化确实对类的超类层次结构进行了编码,因此您不能轻易地对其进行更改。
但是,大多数序列化库都不这样做,并且您看不到此信息,如果更改它们也无所谓。缺点是,许多序列化库在类层次结构中不支持多次使用相同的字段名,而Java序列化则支持。