Вам не нужно явно отмечать производное как Serializable, оно будет наследоваться. Однако serialVersionUID от родителя, хотя и наследуется, не будет использоваться процессом сериализации. Если вы не добавите serialVersionUID к дочернему элементу, он будет сгенерирован.
См. Ниже:
public class A implements Serializable {
protected static final long serialVersionUID = 1L;
}
public class B extends A {
}
public class Main {
public static void main(String[] args){
A a = new A();
B b = new B();
Class aClass = a.getClass();
Class bClass = b.getClass();
long aUid = ObjectStreamClass.lookup(aClass).getSerialVersionUID();
long bUid = ObjectStreamClass.lookup(bClass).getSerialVersionUID();
System.out.printf("serialVersionUID:\n");
System.out.printf("b inherited from a: %d\n", b.serialVersionUID);
System.out.printf("a used by serialization: %d\n",aUid);
System.out.printf("b used by serialization: %d\n",bUid);
}
}
Выход:
serialVersionUID:
b унаследовано от: 1
используется для сериализации: 1
b используется при сериализации: -3675232183873847366