我的超级班是考试。我的一个子类是Analytical。
这在我的意识形态
中是有效的Exam object = new Analytical();
然而事实并非如此。
ArrayList<Exam> object = new ArrayList<Analytical>();
错误是从新到语句的末尾,它说“将对象的类型更改为ArrayList。所以我的问题是如何正确地利用这个数据结构的多态。谢谢。
答案 0 :(得分:1)
在泛型类型声明的两边不能有不同的参数化类型。
所以,你必须在两边使用相同的类型..
应该是: -
ArrayList<? extends Exam> object = new ArrayList<Analytical>();
或
ArrayList<Exam> object = new ArrayList<Exam>();
或
ArrayList<? extends Exam> object = new ArrayList<Exam>();
多态性,不适用于参数化类型..
答案 1 :(得分:0)
您需要将其更改为:
ArrayList<? extends Exam> object = new ArrayList<Exam>();
Inheritance in generics与我们的常规理解略有不同。
答案 2 :(得分:0)
Collections
仅在Compilation
时间内{strong}检查,而不是在Runtime
期间,因此已采取此措施,因此错误错误类型不会进入集合 ...
ArrayList<? extends Exam> object = new ArrayList<Analytical>();
或
ArrayList<? extends Exam> object = new ArrayList<Exam>();