2011-01-05 4 views
2

Ich habe eine Basisklasse, die ListActivity erweitert, die ich verwenden möchte, um eine Menge gemeinsamen Code zu implementieren mehrere verschiedene AktivitätsimplementierungenAndroid-Aktivität mit abstrakter Basisklasse löst einen Kompilierungsfehler aus "ist nicht abstrakt und überschreibt keine abstrakte Methode ..."

Ich möchte diese Basisklasse abstrakt machen, um die Implementierung einer Methode für die Unterklassen zu erzwingen.

Wenn ich eine Basisimplementierung der Methode schreibe und sie in den Unterklassen überschreibe, funktioniert alles gut.

Wenn ich die Methode abstrakt machen, erhalte ich den folgenden Compiler-Fehler:

XXXX.subapps.athletics.AthleticsNewsActivity is not abstract and does not override abstract method getListItems() in XXXX.subapps.BaseCategoryListActivity 

Basisklasse:

public abstract class BaseCategoryListActivity extends ListActivity 
{ 
    .... 
    abstract ArrayList<String> getListItems(); 
    .... 
} 

Beispiel Unterklassen:

public class AthleticsNewsActivity extends BaseCategoryListActivity 
{ 
    .... 
    public ArrayList<String> getListItems() 
    { 
     ...implementation details.... 
    } 
} 
+0

Bitte verwenden Sie mindestens einige [grundlegende Formatierung] (http://stackoverflow.com/editing-help) – mark

Antwort

3

, wenn Sie eine Zusammenfassung verlängern Klasse, die Sie benötigen, um die Methode entweder in der erweiterten Klasse abstrakt zu machen, oder Sie müssen Implementierungen bereitstellen:

public abstract class BaseCategoryListActivity extends ListActivity 
{ 
    .... 
    public abstract ArrayList<String> getListItems(); 
    .... 
} 

public class AthleticsNewsActivity extends BaseCategoryListActivity 
{ 
    .... 
    public ArrayList<String> getListItems() 
    { 
     ...implementation details.... 
    } 
} 

Dies sollte die Änderung des öffentlichen Modifikator
überschriebene Methode haben nicht breiter Sicht Spezifizierer

Auch

Siehe arbeiten, beachten Sie
+0

Meine Güte. Und zu hören, ich dachte, es war etwas Android/Activity spezifisch. Ich vermisste nur das Offensichtliche und machte es komplizierter als es war. Vielen Dank! –

1

Zugriff ändern Modifikator public abstract

Sie haben es genauso aufgeführt:

public abstract ArrayList<String> getListItems()

und bieten dafür eine Implementierung:

abstract ArrayList<String> getListItems();

ändern, es zu lesen.

1

Die Sichtbarkeit passt nicht, machen Sie beide öffentlich.

Out of topic: Bevorzugen Sie Schnittstellen (List) nicht Implementierungen (ArrayList) in der Signatur.

Verwandte Themen