1,转换异常这个好说。
Dog a = new Dog();
Cat b = new Cat();
Dog objA = (Dog)(Object)b;:这里你将Cat类型变量b强转成Object,这个没问题。Object是Cat类的父类
然后你又将它转成Dog类型的。cat和dog类型没有联系,不能强转的。你要是想强转,让Cat类继承Dog类就可以了。
2,ObjectInputStream的ReadObject()方法的基本原理。这个通俗点说,当某个类实现了序列化接口。你用writeObject将对象写出去的时候,系统会生成一个序列号。当你用ReadObject()方法读取这个数据的时候,会对对象的序列好进行解析,再和其类文件进行对比。序列号一致就读取。不一致就抛异常。
具体的话要看源码。 |