我正在学习Java。我想将ArrayList的返回类型重写为子类。有可能吗?编译器说只能重写相同的类型。。。
单位类别
import java.util.ArrayList;
abstract public class BaseUnit {
public BaseUnit() {
}
public abstract ArrayList<BaseElement> getList();
}
public class UnitA extends BaseUnit {
private ArrayList<ElementA> listA;
UnitA() {
super();
listA = new ArrayList<ElementA>();
listA.add(new ElementA());
}
public ArrayList<ElementA> getList() {
return listA;
}
}
元素类
public class BaseElement {
protected String name = "";
public BaseElement() {
}
public void sayName() {
System.out.println(name);
}
}
public class ElementA extends BaseElement {
public ElementA() {
name = "A";
}
}
主要
public static void main() {
UnitA unitA = new UnitA();
unitA.getList().get(0).sayName();
}
两种类型中列表的泛型必须相同。对于您想要做的事情,您基本上有两个选项:使用extends关键字,或者使基类中的类型完全通用。
第一个解决方案是这样的:
import java.util.ArrayList;
abstract public class BaseUnit {
public BaseUnit() {
}
public abstract ArrayList<? extends BaseElement> getList();
}
第二个是这样的:
import java.util.ArrayList;
abstract public class BaseUnit<K> {
public BaseUnit() {
}
public abstract ArrayList<K> getList();
}
public class UnitA extends BaseUnit<ElementA> {
private ArrayList<ElementA> listA;
UnitA() {
super();
listA = new ArrayList<ElementA>();
listA.add(new ElementA());
}
public ArrayList<ElementA> getList() {
return listA;
}
}