RandomAccessFile
расширяется Object
, а не расширяется InputStream
.
Если вы хотите получить InputStream
от RandomAccessFile
, я думаю, что реализация класса-обертки - ваша самая простая ставка. К счастью, единственный абстрактный метод InputStream
- это read()
.
RandomAccessFile реализует DataInput, который включает DataInputstream & InputStream
DataInputStream
- это подкласс InputStream
, который также реализует DataInput
. Дерево наследования и реализации интерфейса выглядит так:
InputStream DataInput
\ / \
\ / \
\ / \
DataInputStream RandomAccessFile
Вы можете использовать DataInputStream
везде, где вы можете использовать InputStream
или DataInput
. Вы можете использовать RandomAccessFile
везде, где вы можете использовать DataInput
.
Но вы не можете идти вверх и вниз по иерархии наследования, как это, используя приведение типов. В частности, приведение класса к подклассу (или интерфейсу к реализации) вызовет ClassCastException
, если только объект не является экземпляром дочернего класса.
Даже если два класса расширяются Object
, это не значит, что они взаимозаменяемы.