【发布时间】:2016-02-01 02:24:10
【问题描述】:
我正在尝试定义一种方法来返回签名给定图上给定顶点的所有邻居
public abstract class GraphClass<V extends Vertex<?>,E extends Edge<V,?>> implements UndirectedGraph<V,E>{
.
.
.
public ArrayList<V> getNeighbors(V v) {...}
}
我希望从我的 KTree 类中重写此方法,该类扩展了上述 GraphClass,如下所示
public class KTree extends GraphClass<KVertex,KEdge> {...
public ArrayList<KVertex> getNeighbors(KVertex v) {
return v.getAdjList();
}
}
这给了我以下错误
不兼容的类型。成立 'java.ustil.ArrayList>',必填 'java.ustil.ArrayList'
KVertex 类还扩展了原来的 Vertex 类,在该类中找到了 .getAdjList() 方法
public class KVertex extends Vertex<Integer> {...}
public class Vertex<V>{
protected ArrayList<Vertex<V>> neighbours = new ArrayList<>();
...
public ArrayList<Vertex<V>> getAdjList(){
return neighbours;
}
}
我在编写此方法时的假设是返回该类型的子类仍然应该是有效的返回类型,因为 KVertex 继承了 Vertex 类,并保留了 is-a 关系。如何正确定义 KVertex 类或 getNeighbours 方法,以便可以返回 Vertex 的任何子类的列表。谢谢!
【问题讨论】:
标签: java inheritance subclass extends return-type