1.   import java.io.*; 
   2.   class Food { 
   3.     Food() { 
   4.       System.out.print("1"); 
   5.     } 
   6.   } 
   7.   class Fruit extends Food implements Serializable { 
   8.     Fruit() { 
   9.       System.out.print("2"); 
  10.     } 
  11.   } 
  12.   public class Banana2 extends Fruit { 
  13.     int size = 42; 
  14.     public static void main(String[] args) { 
  15.       Banana2 b = new Banana2(); 
  16.       b.serializeBanana2(b);       // assume correct serialization 
  17.       b = b.deserializeBanana2(b); // assume correct 
  18.       System.out.println(" restored + b.size + " "); 
  19.     } 
  20.     // more Banana2 methods 
  21.   } 为什么答案是121 restored 42 而不是12 restored 42 

解决方案 »

  1.   

    这道题目出的很微妙,的确没有实现serializeBanana2()和deserializeBanana2(b) 
    但是Banana2类间接继承Food类,而Food类是非序列化类 
    因此当你deserializeBanana2(b)的时候,Food类其实是初始化的,Fruit类是序列化类不会初始化... 
    所以是 121 restored 42 这题其实考察序列化在继承关系上的使用
      

  2.   

    b.serializeBanana2(b);      // assume correct serialization 
    b = b.deserializeBanana2(b); // assume correct 
    这2个方法调用完能实现吗?不太清楚,一直搞不太明白序列化,主要是我不太用