2015-08-12 6 views
5

ho questo superclasse astratta:errore: "classe deve implementare il metodo astratto X", ma ha già

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

e la sottoclasse concreta:

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

Alla prima riga della VideoListActivity sottoclasse, Android Studio restituisce l'errore

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

Posso capire perché dovrebbe. Ma lo fa! Non è vero? Ho controllato che le corrispondenze della firma; Ho provato Option + Return per ottenere l'IDE per suggerire le correzioni; niente funziona.

È solo un errore su Android Studio? o sto facendo qualcosa di sbagliato?

Ora capita che le classi sono in diversi pacchetti: il VideoListActivity sottoclasse è in una "sub-package," foo.bar.baz.video, mentre la MediaListActivity superclasse è in pacchetto foo.bar.baz.

Se si sposta VideoListActivity nel pacchetto foo.bar.baz, l'errore scompare. Ma ho molte di queste sottoclassi concrete e non voglio ingombrare il pacchetto di livello superiore con loro: mi piacciono organizzati nei loro sotto-pacchetti. Cosa posso fare per far sparire questo errore (supponendo che sia addirittura necessario)?

+0

questa sarebbe una buona domanda di intervista java. –

+0

@VinayWadhwa: Suppongo che non farei bene nell'intervista. :-) Su una nota diversa, penso che rappresenti un'opportunità per IntelliJ IDEA di migliorare i propri messaggi di errore di mantenimento della mano. Non che questo sia un sostituto per i programmatori che capiscono come funzionano le classi. – LarsH

risposta

2

La risposta è assicurarsi che l'implementazione del metodo launchMedia() sia accessibile al di fuori del pacchetto: vale a dire che deve essere protected o public. Pensavo di averlo già provato, ma avrei potuto guardare al metodo sbagliato. Ad ogni modo, questo fa andare via l'errore.