Pregunta Java: serializar una clase cuyo padre no es Serializable

2 min de lectura

Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.

Pregunta Java · Serialización

¿Cuál es el resultado de ejecutar la clase Prueba?

public class Padre {
    public Padre() {
        System.out.println("Padre");
    }
}
import java.io.Serializable;
public class Hijo extends Padre implements Serializable {
    public Hijo() {
        System.out.println("Hijo");
    }
}
import java.io.*;
public class Prueba {

    public static void main(String... args) throws Exception {
        Hijo a = new Hijo();
        ObjectOutputStream save = new ObjectOutputStream(new FileOutputStream("archivo.txt"));
        save.writeObject(a);
        save.flush();
        System.out.println("-");
        ObjectInputStream restore = new ObjectInputStream(new FileInputStream("archivo.txt"));
        Hijo b = (Hijo) restore.readObject();
    }
}
  1. Padre Hijo – Padre Hijo
  2. Padre Hijo – Padre
  3. Padre – Hijo
  4. Error en tiempo de ejecución
Ver la respuesta

Respuesta: b.

java PruebaPadre
Hijo
-
Padre

Al crear el objeto se ejecutan los dos constructores: Padre y Hijo. Al deserializarlo no se llama al constructor de la clase serializable, porque su estado se recupera del archivo. Pero Padre no es Serializable, así que su parte no se guardó, y Java la reconstruye llamando a su constructor sin parámetros. Por eso sale Padre una vez más, y Hijo no.

De ahí una regla poco conocida: si una clase serializable hereda de una que no lo es, esa clase padre tiene que tener un constructor sin parámetros accesible. Si no lo tiene, la deserialización falla con InvalidClassException.

Pregunta publicada en 2014 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.

7 comentarios en «Pregunta Java: serializar una clase cuyo padre no es Serializable»

Deja un comentario