Khi bạn cố gắng deserialize một đối tượng serializable, cơ chế phải tạo một trường hợp rỗng của đối tượng, và điền vào các thành viên, để khôi phục lại đối tượng trạng thái khi được đăng. Một hàm tạo của một đối tượng tuần tự hóa sẽ được gọi khi đối tượng được xây dựng lần đầu tiên, nhưng các nhà xây dựng KHÔNG được gọi trong quá trình deserialization bởi vì, về mặt kỹ thuật, bạn không xây dựng đối tượng, thay vào đó là tái tạo nó trước đó. Bất kỳ tác động của việc xây dựng và thao tác sau đó được mong đợi đã được tích hợp vào trạng thái đối tượng.
Bất cứ khi nào bạn xây dựng một đối tượng của bất kỳ lớp, Java phải gọi một constructor của lớp siêu, và các siêu-super-class, vv Bạn có thể chỉ định một constructor cụ thể cho các lớp siêu bằng cách sử dụng super(...)
hoặc nếu bạn don Không chỉ định một hàm tạo siêu, hàm tạo mặc định sẽ được sử dụng. Bằng cách này hay cách khác, tất cả các lớp vào thư mục gốc đều được xây dựng.
Deserialization của các đối tượng serlializable không gây constructor gọi, nhưng khi có một lớp siêu đó không phải là serializable, (có nghĩa là bạn mở rộng một lớp không serializable với một lớp serializable) thì lớp đó không hy vọng được deserialized, và nó không có cơ chế để lưu trữ/khôi phục các thành viên của nó. Nếu lớp siêu không được tuần tự hóa, cơ chế deserialization cần gọi hàm tạo không đối số để đảm bảo rằng thể hiện đối tượng được hoàn nguyên được khởi tạo đúng.
Nếu bạn không chỉ định hàm tạo không đối số, mã deserialization sẽ không cảnh báo bạn về vấn đề này cho đến lần thử đầu tiên của bạn để deserialize đối tượng của lớp đó. Không có cảnh báo tại thời gian biên dịch.
Hơn nữa, lớp con tuần tự hóa của bạn phải chịu trách nhiệm lưu trữ/khôi phục bất kỳ giá trị thành viên nào từ lớp siêu không tuần tự.
Xem http://www.jguru.com/faq/view.jsp?EID=251942 – GKislin