Bạn không phải đánh dấu rõ ràng nguồn gốc là Serializable, nó sẽ được kế thừa. Tuy nhiên, serialVersionUID từ cha mẹ, mặc dù được kế thừa, sẽ không được sử dụng bởi quá trình tuần tự hóa. Nếu bạn không thêm một serialVersionUID vào một con sẽ được tạo ra.
Xem Dưới đây:
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);
}
}
Output:
serialVersionUID:
b kế thừa từ một: 1
một được sử dụng bởi serialization: 1
b sử dụng theo tuần tự hóa: -367523 2183873847366
Nguồn
2015-07-23 10:44:57
Không được âm thanh quái gở, nhưng nó sẽ mất ít thời gian để chỉ cố gắng này hơn nó mất bạn viết câu hỏi này. –
Không phải là âm thanh lén lút, nhưng đây sẽ là một trang web rất, rất nhỏ nếu lời khuyên đó được chú ý nhất quán. –