2017-02-27 3 views
1

Ich habe eine Klasse Vertex<T>, die IVertex<T> implementiert, die Comparable implementiert. Jedes Mal, wenn ich meinen Code kompilieren, erhalte ich die Fehlermeldung:Nicht abstrakte Klasse kann die abstrakte Methode compareTo in Comparable nicht überschreiben?

Vertex is not abstract and does not override abstract method compareTo(IVertex) in Comparable

Das Problem dabei ist, dass kann ich nicht IVertex innerhalb der Schnittstelle eine der Code ändern, wie das ist, was mein Lehrer angewiesen hat. Wie kann ich dieses Problem lösen?

Vertex: Ich habe meinen Code unten enthalten

package student_solution; 


import graph_entities.*; 

import java.util.*; 

public class Vertex<T> implements IVertex<T>{ 

    // Add an edge to this vertex. 

    public void addEdge(IEdge<T> edge){ 

    } 

    // We get all the edges emanating from this vertex: 

    public Collection< IEdge<T> > getSuccessors(){ 

    } 

    // See class Label for an an explanation: 

    public Label<T> getLabel(){ 

    } 

    public void setLabel(Label<T> label){ 

    } 

    } 

IVertex:

package graph_entities; 

import java.util.Collection; 

public interface IVertex<T> extends Comparable<IVertex<T>> 
{ 

    // Add an edge to this vertex. 

    public void addEdge(IEdge<T> edge); 

    // We get all the edges emanating from this vertex: 

public Collection< IEdge<T> > getSuccessors(); 

    // See class Label for an an explanation: 

public Label<T> getLabel(); 

public void setLabel(Label<T> label); 

} 

Vielen Dank im Voraus!

+2

Nun, implementieren Sie die Methode, die Sie vergessen zu implementieren (dh 'public int compareTo (IVertex v)'. –

+0

Der Compiler sagt Ihnen, dass Ihre Klasse die compareTo-Methode implementieren muss - das ist alles. – duffymo

+0

Lesen Sie die Fehlermeldung mehr Es heißt "Vertex", nicht "IVertex". – EJP

Antwort

2

Wie der Fehler vermuten lässt, implementiert Ihre Klasse eine interface, die Comparable erweitert. Nun, um Ihre Klasse zu konkretisieren, müssen Sie override alle Methoden von interfaces Ihre Klasse implementieren.

in Ihrem Fall also alles, was Sie tun müssen, ist compareTo Methode in Vertex class, z.B .:

@Override 
public int compareTo(IVertex<T> o) { 
    // implementation 
    return 0; 
} 

Here ‚s Oracle-Dokumentation auf Schnittstellen und Vererbung außer Kraft zu setzen.

+0

Ja, meistens, aber die Methode, die er implementieren muss, ist nicht "compareTo (T)", sondern "compareTo" (IVertex ). Das könnte sich als a erweisen Design - Problem, je nachdem, wie der Vergleich implementiert werden soll –

+0

@JohnBollinger Danke für den Hinweis Ich habe es verpasst :(Und ja, es könnte sich durchaus als Designproblem herausstellen, aber da OP angewiesen wird, die "Interface", wir können nicht viel tun. –

+0

Danke! Ich glaube, ich geriet in Panik, als ich die c Ommandline-Fehler. Anfänger Fehler. – assassinweed2

Verwandte Themen