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
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
但是Banana2类间接继承Food类,而Food类是非序列化类
因此当你deserializeBanana2(b)的时候,Food类其实是初始化的,Fruit类是序列化类不会初始化...
所以是 121 restored 42 这题其实考察序列化在继承关系上的使用
b = b.deserializeBanana2(b); // assume correct
这2个方法调用完能实现吗?不太清楚,一直搞不太明白序列化,主要是我不太用