2010-06-01 4 views
63

(Newbie a Java, vecchio tempo C# ragazzo.)Android @Override utilizzo

ho notato un sacco di uso di @Override nel codice di esempio Android. Pensavo che tutti i metodi Java fossero di default "virtuali"?

Che poi vuol @Override fare?

Esempio:

private class HelloWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 
+6

Come nota a margine, "Sovrascrivi" non è specifico di Android, ma un'annotazione che esiste in Java 5 e versioni successive: http://java.sun.com/j2se/1.5.0/docs/api/java/ lang/Override.html – Powerlord

+2

Questa intera domanda/thread mi ha aiutato un po 'a capire come funziona '@ override'. Buona domanda, buone risposte. Grazie gente. –

risposta

91

E 'un'annotazione che è possibile utilizzare per dire al compilatore e il vostro IDE che si intende il metodo che ha quel annotazioni di essere un override di un metodo di classe eccellente. Hanno avvertimento/errori nel caso in cui si commettono errori, ad esempio, se avete intenzione di eseguire l'override un metodo, ma errori ortografici, se l'annotazione è lì l'IDE o il compilatore vi dirà che si tratta di non di fatto l'override del metodo della classe Super e quindi puoi determinare il motivo e correggere l'errore ortografico.

Questo è tanto più importante per le applicazioni e le attività Android, ad esempio, in cui tutte le chiamate saranno basate sul ciclo di vita dell'attività e, se non si esegue l'override dei metodi del ciclo di vita, non verranno mai richiamati dal framework. Tutto andrà bene, ma la tua app non funzionerà come tu intendi. Se aggiungi l'annotazione, riceverai un errore.

+7

Non è solo per l'IDE. Il compilatore Java genererà un errore se si @Override un metodo che non è in una super classe. –

+1

@Romain Guy: tout a fait! – JRL

21

l'override-annotazione è solo un suggerimento per il compilatore che si desidera sovrascrivere una determinata funzione. Il compilatore controllerà quindi parent-classes e interfacce se la funzione esiste lì. In caso contrario, si otterrà un errore di compilazione.

Fondamentalmente è solo un meccanismo di sicurezza.

Per riferimento, si veda this article (esclusione si spiega qualche parte nel mezzo)

+5

Questo collegamento è morto ora – Flexicoder

+2

[Versione archiviata] (https://web.archive.org/web/20080905021258/http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html) – HEATH3N

+0

Grazie per il collegamento aggiornato. Ho aggiornato la mia risposta. – lostiniceland

50

Questo codice per il principiante che vogliono davvero capire circa il processo @Override, questo vi aiuterà! (Ricordare il concetto di ereditarietà di Java.)

Ad esempio, la classe Fish potrebbe avere due sottoclassi: FreshwaterFish e SaltwaterFish.

Queste sottoclassi avrebbero tutte le funzionalità della classe Fish, ma potrebbero ulteriormente personalizzare gli oggetti attraverso nuovi attributi e comportamenti o comportamenti modificati dalla classe genitore Fish. Ad esempio, la classe FreshwaterFish potrebbe includere informazioni sul tipo di ambiente di acqua dolce vissuto in (ad esempio fiume, lago, stagno o pozzanghera).

Allo stesso modo, la classe SaltwaterFish potrebbe personalizzare il metodo makeBabyFish() in modo che il pesce mangia la sua compagna dopo la riproduzione (come definito nella classe super) utilizzando il meccanismo di esclusione, in questo modo:

public class SaltwaterFish extends Fish 
{ 
    @Override 
    public void makeBabyFish(Fish fishSpouse, int numBabies) { 
     // call parent method 
     super.makeBabyFish(fishSpouse, numBabies); 
     // eat mate 
     eat(fishSpouse); 
    } 
} 
+2

MOLTO BENE SPIEGATO .. ​​grazie –

+0

Quindi in pratica si usa l'override per "diseredare" e riscrivere una funzione dalla super-classe. Fatto. –

+1

Perché non è stato aggiunto alcun nome di classe prima di mangiare metodo quando lo si chiama? – erical

0

Override è per lo più usato in caso di definizione di un metodo. Il sorvolo è simile al modo in cui il suo significato.

cercherò di spiegare in way.Suppose molto zoppo se si dispone onCreate() Metodo già definito e hanno le proprietà ad esso associati. e di nuovo quando chiamate il metodo Oncreate() nel vostro codice per determinati oggetti, il codice che avete scritto ora ... sostituirà la proprietà formalmente definita o la proprietà ereditata di Oncreate() per la vostra applicazione.