为什么我不能在使用ArrayList <superclass>的方法中使用ArrayList <subclass>作为参数?

时间:2017-01-12 18:47:05

标签: java arraylist

见标题。我无法弄清楚它为什么不起作用。

非工作代码示例:

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);

我的代码到底在幕后做了什么?

0 个答案:

没有答案