Объясните пожалуйста некоторые моменты
1)
Каким образом конструктор
public A(){
}
инициализирует переменную???????????????????????????
Я понимаю что если я наследуюсь от класса который не поддерживает Serializable, то в процессе десериализации, поля НЕ сериализуемых классов (родительских классов, НЕ реализующих интерфейс Serializable) инициируются вызовом конструктора без параметров. Но конструктор пустой как он инициализирует переменную, что вообще он дает если он никак не инициализирует внутри себя поле nameA?
При таком варианте nameA: A
package com.javarush.task.task20.task2018;
import java.io.*;
/*
Найти ошибки
*/
public class Solution implements Serializable {
public static class A {
protected String nameA = "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);
super.nameA += nameA;
this.nameB = nameB;
}
private void writeObject(ObjectOutputStream out) throws IOException{
out.defaultWriteObject();
out.writeObject(nameA);
// out.writeObject(nameB);
}
private void readObject(ObjectInputStream in)throws IOException,ClassNotFoundException{
in.defaultReadObject();
nameA = (String )in.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);
}
}