import java.io.*; public class Solution implements Serializable { public static class A { String nameA = "A"; //static 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 IOException { // oos.defaultWriteObject(); // oos.writeObject(this.nameA); // oos.writeObject(this.nameB); // } // private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { // ois.defaultReadObject(); // this.nameA = (String)ois.readObject(); // this.nameB = (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); } } would you be more kind to help with above code . when i run this code: output is: nameA: AB2B2, nameB: C33 nameA: A, nameB: C33 and when i make change in above code like // String nameA = “A”; –commented this static String nameA=”A”; — uncommented this. output is: nameA: AB2B2, nameB: C33 nameA: AB2B2, nameB: C33 i am not able to understand why output differs. I must be missing some vital concept here. . Already invested 4-5 hours but still did not understand. Hope, you would help with this. thanks you so much. have a good day.