当前位置: 首页 > 面试题库 >

为什么不能将RandomAccessFile强制转换为Inputstream?

崔宇
2023-03-14
问题内容

执行此强制转换时出现编译错误:

RandomAccessFile raf = new RandomAccessFile(...)
InputStream is = (InputStream)raf;

RandomAccessFile应该被继承,InputStream尽管不能直接继承。

从文档:

RandomAccessFile农具DataInput其中inturn DataInputstreamInputStream

为什么这无效?

也感谢您提供有关使用RandomAccessFileas 的正确方法的意见InputStream

我正在考虑包装方法。


问题答案:

RandomAccessFile扩展Object,并且
扩展InputStream

如果您想从中获得帮助InputStreamRandomAccessFile我认为实现包装器类是您最简单的选择。幸运的是的唯一抽象方法InputStreamread()

RandomAccessFile实现了DataInput,该数据输入将依次转为DataInputstream和InputStream

DataInputStream是的子类InputStream,它也恰好实现DataInput。继承和接口实现树如下所示:

           InputStream      DataInput
               \              /   \
                \            /     \
                 \          /       \
                DataInputStream   RandomAccessFile

您可以在DataInputStream任何可以使用InputStream或的地方使用DataInput。您可以在RandomAccessFile任何可以使用的地方使用DataInput

但是您不能使用强制转换在这样的继承层次结构中上下浮动。特别是,将一个类强制转换为子类(或实现的接口)将引发,ClassCastException除非该对象恰好是子类的实例

即使两个类都发生扩展Object,但这并不意味着它们是可互换的。



 类似资料: