在我的Graph类中,我扩展了一个抽象类List(可扩展的类似)。我想制作列表的对象,但不想在图类中实现(抽象)方法。无论何种扩展,Graph都必须实现该方法。我怎么能这样做?
图表
public abstract class Graph<T> extends List<T>{
private List<List<T>> adjacencyList;
private int vertexNumber;
private boolean directed;
public Graph(int vertex,boolean directed)
{
vertexNumber=vertex;
this.directed=directed;
adjacencyList= new List<List<T>>()// The problem is here compiler wants the implementation of the abstract method.
createVertex(vertexNumber);
}
答案 0 :(得分:0)
您正在定义一个扩展List的抽象类 所以基本上你没有超过2个选项;
答案 1 :(得分:0)
您无法创建抽象类的实例,您必须实现所有方法。
但是在您的情况下,您只需要提供一个现有的实现。最有可能是function tipSidenav() {
return {
templateUrl: '/tip/resources/html/sidenav.html',
controller: ['$rootScope', function($rootScope) {
var ctrl = this;
$rootScope.$watchCollection(
function(scope) {
return getSections();
},
function(newValue, oldValue, scope) {
ctrl.sections = newValue;
}
);
ctrl.scrollTo = /*...*/;
function getSections() {
// More efficient way of gettings IDs
var ids = [];
var nodeList = document.querySelectorAll('.sidenav-item');
for (var i = 0; i < nodeList.length; i++) {
ids.push(nodeList[i].id);
}
return ids;
}
}],
controllerAs: 'ctrl'
};
}
ArrayList
如果查看List,列出了几个实现类。
最常见的是: - ArrayList - LinkedList - Stack
设计问题:为什么您的图表会扩展列表,然后列出一个列表?通常,您只执行以下其中一项
将两个关系放在一个对象上会让人感到困惑。
答案 2 :(得分:0)
您可以这样做以强制子类提供创建列表的方法:
public abstract class Graph<T> {
private List<List<T>> x;
public Graph(int vertex,boolean directed) {
adjacencyList = createListOfList();
}
protected abstract List<List<T>> createListOfList();
}
答案 3 :(得分:0)
因为您在:
中提供了PRIVATE访问修饰符private List<List<T>> adjacencyList;
private int vertexNumber;
private boolean directed;
所以,即使你是另一个类(假设)A扩展Graph,它也能够访问这些变量。尝试使用公共访问说明符,它可能会有所帮助。
谢谢你