Java Serialization for Extended Class

java

Solution

No.During the process of serialization only the fields of Serializable objects are written out and restored.

According to javadocs

During deserialization, the fields of non-serializable classes will be initialized using the public or protected no-arg constructor of the class.

Where as the fields of serializable subclasses will be restored from the stream.

Please look into this example Here `ElectronicDevice` is not `Serializable`,where as `Mp3player ` is `Serializable`.Observe the fields of respected classes behaviour in serialization process.

import java.io.*;
class ElectronicDevice  { 
  public int i = 0;
  protected ElectronicDevice() 
  {
       System.out.println("ed "); 
  }
}
class Mp3player extends ElectronicDevice implements Serializable {
   int j =0;
   Mp3player() 
   { 
       System.out.println("mp "); 
   }
}
class MiniPlayer extends Mp3player {
  MiniPlayer()
  { 
      System.out.println("mini "); 
  }
 public static void main(String[] args) {
      MiniPlayer m = new MiniPlayer();
      m.i = 30;
      m.j = 40;
      try {
             System.out.println("i value before serialization: "+m.i);//prints 30
             System.out.println("i value before serialization: "+m.j);//prints 40
             FileOutputStream fos = new FileOutputStream("dev.txt");
             ObjectOutputStream os = new ObjectOutputStream(fos);
             os.writeObject(m); os.close();

             FileInputStream fis = new FileInputStream("dev.txt");
             ObjectInputStream is = new ObjectInputStream(fis);
             MiniPlayer m2 = (MiniPlayer) is.readObject(); 
             is.close();
             System.out.println("i value after serialization: "+m2.i);//prints o
             System.out.println("j value after serialization: "+m2.j);//prints 40
             System.out.println();
        } catch (Exception x) {
            x.printStackTrace();
            System.out.print("x "); 
       }
   }
 }

Problem

In java serialization class Mp3player extends ElectronicDevice implements Serializable in this code super class electronicdevice is not implemented serializable. here super class is also getting serialized. my understanding is super class is also gets serialized due to extends.let me know my understanding is correct or not. ``` import java.io.*; class ElectronicDevice { ElectronicDevice() { System.out.print("ed "); } } class Mp3player extends ElectronicDevice implements Serializable { Mp3player() { System.out.print("mp "); } } class MiniPlayer extends Mp3player { MiniPlayer() { System.out.print("mini "); } public static void main(String[] args) { MiniPlayer m = new MiniPlayer(); try { FileOutputStream fos = new FileOutputStream("dev.txt"); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(m); os.close(); FileInputStream fis = new FileInputStream("dev.txt"); ObjectInputStream is = new ObjectInputStream(fis); MiniPlayer m2 = (MiniPlayer) is.readObject(); is.close(); System.out.println(); } catch (Exception x) { System.out.print("x "); } } } ```

Original source

Related problems