2016-05-10 17 views
-1

In meiner Graph-Klasse erweitert ich eine abstrakte Liste der Klasse (die vergleichbar ist). Ich möchte Objekt der Liste machen, aber nicht (abstrakte) Methode in Graph-Klasse implementieren. Wer auch immer erweitert Graph muss diese Methode implementieren. Wie kann ich das machen?wie ein Objekt der abstrakten Klasse ohne Implementierungsmethode zu erstellen

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

Mögliche Duplikat [Abstract Klasse in Java] (http://stackoverflow.com/questions/1320745/abstract-class-in-java) – Raedwald

+1

Sie können nicht per Definition dessen, was ein abstrakte Klasse ist. – Raedwald

+0

Sie können die Liste nicht erweitern, da List nicht generisch ist und nicht parametrisiert werden kann .; – FredK

Antwort

0

Sie könnten dies tun Subklassen zu zwingen, ein Mittel bereitzustellen, um die Liste zu erstellen:

public abstract class Graph<T> { 
    private List<List<T>> x; 

    public Graph(int vertex,boolean directed) { 
     adjacencyList = createListOfList(); 
    } 

    protected abstract List<List<T>> createListOfList(); 
} 
0

Sie eine abstrakte Klasse, die eine Liste erstreckt so dass im Grunde Sie nicht mehr als 2 Optionen haben;

  1. entweder die Methoden der Liste implementieren
  2. oder abstrakt definiert und die Klasse, die das Diagramm erbt wird es handhaben müssen ...
0

Sie keine Instanz einer abstrakten erstellen Klasse müssen Sie alle Methoden implementieren.

In Ihrer Situation müssen Sie jedoch nur eine der vorhandenen Implementierungen bereitstellen. Wahrscheinlich ein ArrayList

adjacencyList = new ArrayList<List<T>>(); 

Wenn man sich die List aussehen gibt es mehrere implementierenden Klassen aufgeführt.

Am häufigsten sind: - ArrayList - LinkedList - Stack

Design-Frage: Warum Ihre Grafik Liste erweitern und dann eine Liste der Listen haben? Typischerweise werden nur Sie eine der folgenden

tun
  • Liste erweitern, in diesem Fall Ihr Graph ist eine Liste
  • Listenfeld, in diesem Fall Ihr Graph eine Liste

Es ist verwirrend, beide Beziehungen auf einem Objekt zu haben.

0

da Sie in PRIVATE Zugriffsmodifikator bieten:

private List<List<T>> adjacencyList; 
private int vertexNumber; 
private boolean directed; 

so, auch wenn Sie eine andere Klasse (Angenommen) A erweitert Graph, es wäre in der Lage, auf diese Variablen zuzugreifen. Versuchen Sie es mit dem öffentlichen Zugriffsspezifizierer, es kann helfen.

DANKE

Verwandte Themen