重写Java上子类的返回类型



我正在学习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;
}
}

最新更新