见标题。我无法弄清楚它为什么不起作用。
非工作代码示例:
displayList(subclassArrayList);
...给我
"incompatible types: ArrayList<B> cannot be converted to ArrayList<A>"
我的课程:
public static class A{
int someAttribute = 0;
A(){}
}
public static class B extends A{
int someOtherAttribute = 2;
B(int value){
this.someOtherAttribute = value;
}
}
主要地方:
ArrayList<B> subclassArrayList = new ArrayList();
subclassArrayList.add(new B(3));
subclassArrayList.add(new B(5));
subclassArrayList.add(new B(7));
违规功能:
void displayList(ArrayList<A> superclassList){
for(A item : superclassList){
System.out.print(item.someOtherAttribute);
System.out.print(" ");
}
}
但是,我发现我能够做到这一点没有明显的问题。
ArrayList<A> superclassArrayList = new ArrayList();
superclassArrayList.addAll(subclassArrayList);
displayList(superclassArrayList);
我的代码到底在幕后做了什么?