Java Serialization – Exemple avec Héritage
1. Introduction
La sérialisation en Java permet de convertir un objet en un flux de bytes pour le stocker ou le
transmettre. Ce document résume un exemple avec héritage et les bonnes pratiques.
2. Classes initiales
class Person implements Serializable {
String name;
Person(String name) {
[Link] = name;
}
}
class Student extends Person {
String school;
public Student(String name, String school) {
super(name);
[Link] = school;
}
public String toString() {
return name + " " + school;
}
}
public class TestClass {
public static void main(String[] args) {
Person p = new Student("Bob Dylan", "NYU");
try (
ObjectOutputStream oos = new ObjectOutputStream(new
FileOutputStream("[Link]"));
ObjectInputStream ois = new ObjectInputStream(new
FileInputStream("[Link]"));
) {
[Link](p);
[Link]();
[Link]((Student) [Link]());
} catch (Exception e) {
[Link]();
}
}
}
1
3. Problème rencontré
• Le code ne fonctionne pas correctement si Student n’implémente pas Serializable
explicitement.
• En Java, lors de la désérialisation :
• Si une superclasse est sérialisable, la sous-classe peut l’être automatiquement.
• Si une superclasse n’est pas sérialisable, un constructeur sans argument est requis.
4. Solution
Il faut faire que Student implémente Serializable :
class Student extends Person implements Serializable {
String school;
public Student(String name, String school) {
super(name);
[Link] = school;
}
public String toString() {
return name + " " + school;
}
}
5. Résultat attendu
Bob Dylan NYU
6. Bonnes pratiques et règles importantes
Cas Condition
Superclasse Serializable Sous-classe automatiquement sérialisable
Superclasse Non-Serializable Doit avoir constructeur sans argument
Champs de la sous-classe Doivent être serializable ou déclarés transient
7. Notes supplémentaires
• Les champs transient ne sont pas sérialisés.
• Les objets sérialisables doivent avoir un serialVersionUID pour assurer la compatibilité des
versions.
• La désérialisation ne passe pas par les constructeurs si la superclasse est sérialisable.
• Toujours gérer les exceptions IOException et ClassNotFoundException .
2
Ce résumé fait environ 2700 caractères et couvre toutes les notions clés de l'exemple de sérialisation
avec héritage en Java.