package com.javarush.task.task20.task2018;

import java.io.*;

/*
Найти ошибки
*/
public class Solution implements Serializable{
    public static class A {

        protected String nameA = "A";

        public A() {

        }

        public A(String nameA) {
            this.nameA += nameA;
        }
    }

    public class B extends A implements Serializable {

        private String nameB;

        public B(String nameA, String nameB) {
            super(nameA);
            this.nameA += nameA;
            this.nameB = nameB;
        }

        private void writeObject(ObjectOutputStream oos) throws Exception{
            oos.defaultWriteObject();
            oos.writeObject(nameA);
        }

        private void readObject(ObjectInputStream ois) throws  Exception{
            ois.defaultReadObject();
            nameA = (String) ois.readObject();
        }
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(arrayOutputStream);

        Solution solution = new Solution();
        B b = solution.new B("B2", "C33");
        System.out.println("nameA: " + b.nameA + ", nameB: " + b.nameB);

        oos.writeObject(b);

        ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(arrayInputStream);

        B b1 = (B) ois.readObject();
        System.out.println("nameA: " + b1.nameA + ", nameB: " + b1.nameB);
    }
}
Почитав комментарии я понял что мы в ручную передаем параметр nameA т. к. при десериализации он не передается потому что относится к классу А, который в свою очередь не имеет интерфейса Serializable Вопрос: при создании объекта B
B b = solution.new B("B2", "C33");
срабатывает конструктор
public B(String nameA, String nameB) {
          super(nameA);
          this.nameA += nameA;
          this.nameB = nameB;
      }
в этом конструкторе я так понимаю для объекта b мы создали переменную nameA уже относящуюся к объекту b типа B. так почему при десериализации переменную nameA не видит, если она относится к объекту b типа B (который серииализуемый)?