方法中的Java继承ArrayList类型

方法中的Java继承ArrayList类型,java,inheritance,arraylist,types,Java,Inheritance,Arraylist,Types,我正在创建类AClass的子类BClass。AClass有一个方法,该方法将AClass类型的ArrayList作为其输入。因此,我不能将此方法用于BClass类型的ArrayList。我明白这是为什么,但我不知道如何做正确。我可以将整个ArrayList转换为键入AClass吗 我的代码更复杂,但本例显示了基本问题: class AClass{ public float f; public AClass(float fstart){ f = fstart; } publ

我正在创建类AClass的子类BClass。AClass有一个方法,该方法将AClass类型的ArrayList作为其输入。因此,我不能将此方法用于BClass类型的ArrayList。我明白这是为什么,但我不知道如何做正确。我可以将整个ArrayList转换为键入AClass吗

我的代码更复杂,但本例显示了基本问题:

class AClass{
  public float f;
  public AClass(float fstart){
    f = fstart;
  }
  public void setf(ArrayList<AClass> aList){
    for(AClass ax : aList) f += ax.f;
  }
}

class BClass extends AClass{
  public BClass(float fstart){
    super(fstart);
  }
}

AClass a1 = new AClass(1.1);
AClass a2 = new AClass(1.2);
AClass a3 = new AClass(1.3);
BClass b1 = new BClass(2.1);
BClass b2 = new BClass(2.2);
BClass b3 = new BClass(2.3);

ArrayList<AClass> aList = new ArrayList<AClass>();
aList.add(a2); aList.add(a3);
a1.setf(aList);

ArrayList<BClass> bList = new ArrayList<BClass>();
bList.add(b1); bList.add(b2); bList.add(b3);
a2.setf(bList);
类AClass{
公共基金;
公共AClass(float-fstart){
f=fstart;
}
公共无效setf(ArrayList列表){
对于(AClass ax:aList)f+=ax.f;
}
}
类BClass扩展了AClass{
公共b类(浮动fstart){
超级(fstart);
}
}
AClass a1=新AClass(1.1);
AClass a2=新AClass(1.2);
AClass a3=新AClass(1.3);
B类b1=新B类(2.1);
B类b2=新B类(2.2);
B类b3=新B类(2.3);
ArrayList aList=新的ArrayList();
(a)添加(a2);3.添加(a3);
a1.setf(aList);
ArrayList bList=新的ArrayList();
b添加(b1);bList.add(b2);bList.add(b3);
a2.setf(bList);

方法
setf
要求的是
ArrayList
,而不是
ArrayList
ArrayList
不扩展
ArrayList

由于继承的原因,
BClass
的实例实际上也是一个
AClass
,因此您可以简单地将第二个列表声明为
ArrayList
类型,并将其传递给方法:

ArrayList<AClass> bList = new ArrayList<AClass>();  // instead of BClass
bList.add(b1);
bList.add(b2);
bList.add(b3);
a2.setf(bList);

非常感谢!
class AClass {
    public float f;

    public AClass(float fstart) {
       f = fstart;
    }

    // TODO consider using List instead of ArrayList
    public void setf(ArrayList<? extends AClass> aList) {
       for(AClass ax : aList) f += ax.f;
    }
}

...

ArrayList<BClass> bList = new ArrayList<BClass>();
bList.add(b1);
bList.add(b2);
bList.add(b3);
a2.setf(bList);