My question is related to Java language. This is what I got:
interface I1{}
interface I2{}
class C1 implements I1{}
class C3 extends C1 implements I2{}
When
C1 01;
C3 o3;
I1 i1;
etc
And now it turns out that I2 i2 = (I2) i1;
is right because at run time i1 actually refers to an object that implements I2.
But I don't get it. Interfaces have no relationships between one another, so how can you cast it to an adjacent interface?
There is no more code, it is simply a drill in order to prepare for Java certification.
Best regards
If you cast an Integer
to a String
, the compiler can stop that as illegal, but, since a class can implement a variety of interfaces, the compiler can't know if you are trangressing when you cast one interface type to another. Consider this code:
I1 i1 = getI1();
if (i1 instanceof I2) {
I2 i2 = (I2) i1;
}
If the Java compiler didn't allow casts from one interface to another, this perfectly legitimate piece of code wouldn't compile.
I2 i2 = (I2) i1;
means: I know that the concrete runtime type of the object referenced by i1
implements the I2
interface, so I would like to reference it as an I2
. If the concrete runtime type of i1
indeed implements I2
, the cast will succeed.
The fact that I1
and I2
have nothing in common doesn't matter. What matters is the actual concrete runtime type of the object referenced by i1
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With