2015-08-12 5 views
5

Ich habe diese abstrakte Superklasse:Fehler: „Klasse implementieren muss abstrakte Methode X“, aber es schon tut

public abstract class MediaListActivity extends Activity { 
    ... 
    abstract void launchMedia(MediaFile mediaFile); 
} 

und die konkrete Unterklasse:

public class VideoListActivity extends MediaListActivity { 
    ... 
    void launchMedia(MediaFile mediaFile) { 
     // TODO: implement launchMedia() 
    } 
} 

In der ersten Zeile des VideoListActivity Unterklasse, Android Studio gibt den Fehler

Class 'VideoListActivity' must either be declared abstract or implement abstract method 'launchMedia(MediaFile)' in 'MediaListActivity'

Ich kann sehen, warum es sollte. Aber es tut! Nicht wahr? Ich habe überprüft, dass die Signatur übereinstimmt. Ich habe Option + Return ausprobiert, um die IDE dazu zu bringen, Fixes vorzuschlagen; nichts funktioniert.

Ist das nur ein Fehler bei Android Studio? oder mache ich etwas falsch?

Nun kommt es vor, dass die Klassen in verschiedenen Paketen sind: die Unterklasse VideoListActivity in einem „Unterpaket“ foo.bar.baz.video, während die Super MediaListActivity im Paket ist foo.bar.baz.

Wenn ich VideoListActivity nach oben in foo.bar.baz Paket verschiebe, verschwindet der Fehler. Aber ich habe mehrere dieser konkreten Unterklassen, und ich möchte das Paket der obersten Ebene nicht mit ihnen durcheinander bringen: Ich mag sie in ihren Unterpaketen organisiert. Was kann ich tun, damit dieser Fehler verschwindet (vorausgesetzt, es ist sogar notwendig)?

+0

dies würde eine gute Interview Frage machen. –

+0

@ VinayWadhwa: Ich denke, ich würde in diesem Interview nicht gut machen. :-) Mit anderen Worten, ich denke, es ist eine Gelegenheit für IntelliJ IDEA, seine Hand-Holding-Fehlermeldungen zu verbessern. Nicht, dass dies ein Ersatz für Programmierer ist, die verstehen, wie Klassen funktionieren. – LarsH

Antwort

2

Die Antwort ist, um sicherzustellen, dass die Implementierung der Methode launchMedia() außerhalb ihres Pakets zugänglich ist: d. H. Es muss protected oder public sein. Ich dachte, ich hätte das schon versucht, aber vielleicht habe ich mir die falsche Methode angeschaut. Wie auch immer, das macht den Fehler weg.

Verwandte Themen