在
o1和
o3一起使用时
(I2),您告诉编译器该对象的类实际上是其声明类型的子类,并且该子类实现
I2。
该
Integer班是 最后的 ,所以
o3不可能是一个子类的实例
Integer:编译器知道你在说谎。
C1但是不是最终的,所以
o1
可以 是
C1该Implements 的子类型的实例
I2。
如果您使用
C1final,编译器也会抱怨:
interface I1 { }interface I2 { }final class C1 implements I1 { }class C2 implements I2 { }public class Test{ public static void main(){ C1 o1 = new C1(); C2 o2 = new C2(); Integer o3 = new Integer(4); I2 y = (I2)o3; //compiler complains here !! I2 x = (I2)o1; //compiler complains too }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)