I get compilation error when I do this cast:
RandomAccessFile raf = new RandomAccessFile(...)
InputStream is = (InputStream)raf;
Rand
RandomAccessFile extends Object
, and does not extend InputStream
.
If you want get an InputStream
from a RandomAccessFile
I think implementing a wrapper class is your simplest bet. Luckily the only abstract method of InputStream
is read()
.
RandomAccessFile implements DataInput which inturn DataInputstream & InputStream
DataInputStream
is a subclass of InputStream
, which also happens to implement DataInput
. The inheritance and interface implementation tree looks like this:
InputStream DataInput
\ / \
\ / \
\ / \
DataInputStream RandomAccessFile
You could use a DataInputStream
anywhere where you could use an InputStream
or a DataInput
. You could use a RandomAccessFile
anywhere where you could use a DataInput
.
But you can't go up and then down in the inheritance hierarchy like this using casts. In particular, casting a class to a subclass (or an interface to an implementation) will raise a ClassCastException
unless the object happens to be an instance of the child class.
Even though two classes happen to extend Object
that doesn't mean they are interchangeable.