编译器在将子类分配给java中的超类时是否插入了类型转换?
问题描述:
我已阅读有效的Java第5章泛型。编译器在将子类分配给java中的超类时是否插入了类型转换?
“当你使用泛型集合,而不是原始的类型,编译器插入一个你看不见的管型和保证......”
因此,这里是我的问题。
假设我们有一个Cat类和一个Animal类。
Class Animal{}
Class Cat extends Animal{}
我们可以这样做:
Animal animal=new Cat();
该编译器插入像类型转换:
Animal animal=(Animal)(new Cat());?
因为我觉得猫的动物,他们有不同类型的引用。
答
是否编译器插入等类型转换:
号Cat
是Animal
子类型。您可以将类型Cat
的值分配给类型为Animal
到widening reference conversion的变量(或将其绑定到参数)。
加宽引用转换从任何引用类型
S
存在于任何 引用类型T
,提供S
是T
一个亚型(§4.10)。
有没有涉及或必要的演员。泛型不相关。
你的问题如何适用于仿制药?您所指的代码段中没有泛型。 – 2014-10-17 01:01:42
@SotiriosDelimanolis这是我的想法。我认为他们有共同点? – AlexWei 2014-10-17 01:03:01
引用明确指代泛型,但是您发布的代码没有任何代码。那么关系是什么?你认为他们有什么共同之处?你问我是否认为他们有共同点? – 2014-10-17 01:04:07