方法中的Java继承ArrayList类型
我正在创建类AClass的子类BClass。AClass有一个方法,该方法将AClass类型的ArrayList作为其输入。因此,我不能将此方法用于BClass类型的ArrayList。我明白这是为什么,但我不知道如何做正确。我可以将整个ArrayList转换为键入AClass吗 我的代码更复杂,但本例显示了基本问题:方法中的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
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);