如何在没有实现方法的情况下创建抽象类的对象

时间:2016-05-10 17:29:40

标签: java abstract-class

在我的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);

}

4 个答案:

答案 0 :(得分:0)

您正在定义一个扩展List的抽象类 所以基本上你没有超过2个选项;

  1. 要么实现列表的方法
  2. 或定义了抽象,并且继承Graph的类必须处理它......

答案 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,它也能够访问这些变量。尝试使用公共访问说明符,它可能会有所帮助。

谢谢你