给定程序的输出是什么?( )
import java.io.*;
public class Test86 {
public static void main(String[] args) throws ClassNotFoundException, IOException {
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ObjectOutputStream objStrm = new ObjectOutputStream(bOut);
Beta b = new Beta() {
{ a=2; b=3; }
};
objStrm.writeObject(b);
ObjectInputStream objInStrm = new ObjectInputStream(new ByteArrayInputStream(bOut.toByteArray()));
System.out.println(objInStrm.readObject().toString());
}
}
class Alpha {
public int a;
public transient int b;
}
class Beta extends Alpha implements Serializable {
public String toString() {
return String.valueOf(a) + String.valueOf(b);
}
}11
11
00
22
1、Serializable不具备可传递性,因为Alpha没有实现序列化接口,所以a和b都不会被序列化。
2、transient修饰的变量会被Serializable接口忽略,但没有实现Serializable是没有意义的。
3、new Beta()对象后加大括号{}实际上已经创建了它的一个匿名子类,里面的代码可以继承父类的特征,但这个类已经不是Beta,“{ a=2; b=3; }”这个是实例代码块,子类构造函数之前运行。
2、transient修饰的变量会被Serializable接口忽略,但没有实现Serializable是没有意义的。
3、new Beta()对象后加大括号{}实际上已经创建了它的一个匿名子类,里面的代码可以继承父类的特征,但这个类已经不是Beta,“{ a=2; b=3; }”这个是实例代码块,子类构造函数之前运行。