I don't understand why the the following is said in the lecture (link above) : "Third, when you use inheritance, all descendant classes that inherit some externalizable class must also have default constructors." I assume this is only true if (although this was not written in the sentence) so if we want to serialize/deserialize these descendant classes as well? I tried to add a child class written without a default constructor to an externalizable class that I serialized and didn't get any errors on deserialization, it worked fine:

public class Cat implements Externalizable {
    // we want to serialize a Cat object. So this class must have a default constructor, and yes, it does.
    public int age;

    public void writeExternal(ObjectOutput oo) throws IOException {

    public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException {
        age = oi.readInt();

    public static void main (String[] args) throws Exception {

        Leopard leop = new Leopard(80);
        leop.age = 12;

        Cat c1 = new Cat (); // the object we want to serialize/deserialize
        c1.age = 6;


        ByteArrayOutputStream baos = new ByteArrayOutputStream ();
        ObjectOutputStream oos = new ObjectOutputStream(baos);


        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        Cat c2 = (Cat) ois.readObject();


class Leopard extends Cat { // a descendant class that inherits an externalizable class, and...
     public int speed;

     public Leopard (int s) { // and according to CG it should to have a default constructor, but it doesn't
        speed = s;