Cómo funciona la serialización cuando solo la subclase se implementa como serializable

Solamente subclase ha implementadoSerializable interfaz.

import java.io.*;

public class NewClass1{

    private int i;
    NewClass1(){
    i=10;
    }
    int getVal() {
        return i;
    }
    void setVal(int i) {
        this.i=i;
    }
}

class MyClass extends NewClass1 implements Serializable{

    private String s;
    private NewClass1 n;

    MyClass(String s) {
        this.s = s;
        setVal(20);
    }

    public String toString() {
        return s + " " + getVal();
    }

    public static void main(String args[]) {
        MyClass m = new MyClass("Serial");
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serial.txt"));
            oos.writeObject(m); //writing current state
            oos.flush();
            oos.close();
            System.out.print(m); // display current state object value
        } catch (IOException e) {
            System.out.print(e);
        }
        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serial.txt"));
            MyClass o = (MyClass) ois.readObject(); // reading saved object
            ois.close();
            System.out.print(o); // display saved object state
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

Una cosa que noté aquí es que la clase padre no está serializada. Entonces, ¿por qué no tiróNotSerializableException de hecho se está mostrando lo siguiente

Salida

Serial 20
Serial 10

Además, la salida difiere deSerialization yDe-serialization. Sólo lo sé, es porque la clase padre no ha implementadoSerializable. Pero, si alguien me explica, qué sucede durante la serialización y des-serialización de objetos. ¿Cómo cambia el valor? No soy capaz de entenderlo, también he usado comentarios en mi programa. Así que, si me equivoco en algún momento, por favor hágamelo saber.