web-dev-qa-db-ja.com

Android @Override usage

(Javaの初心者、昔はC#の男。)

Androidのサンプルコードで@Overrideの使用が多いことに気付きました。すべてのJavaメソッドはデフォルトで「仮想」だと思いましたか?

@Overrideはどうしますか?

例:

private class HelloWebViewClient extends WebViewClient {

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

これは、コンパイラーとIDEに、その注釈を持つメソッドがスーパークラスメソッドのオーバーライドになることを意図していることを伝えるために使用できる注釈です。たとえば、メソッドをオーバーライドしようとしてもスペルを間違えた場合、注釈がある場合はIDEまたはコンパイラがnotであることを通知します事実、スーパークラスメソッドをオーバーライドしているため、理由を特定し、スペルミスを修正できます。

これは、たとえばAndroidアプリケーションとアクティビティの場合、すべての呼び出しがアクティビティライフサイクルに基づいている場合に重要です。ライフサイクルメソッドを適切にオーバーライドしないと、取得されません。すべてが正常にコンパイルされますが、アプリは意図したとおりに機能しません。注釈を追加すると、エラーが発生します。

99
JRL

_@Override_プロセスについて本当に理解したい初心者向けのこのコード、これはあなたを助けます! (Javaの継承の概念を思い出してください。)

たとえば、Fishクラスには、FreshwaterFishSaltwaterFishの2つのサブクラスがあります。

これらのサブクラスにはFishクラスのすべての機能がありますが、親クラスFishからの新しい属性と動作、または変更された動作によってオブジェクトをさらにカスタマイズできます。たとえば、FreshwaterFishクラスには、住んでいた淡水環境のタイプ(川、湖、池、水たまりなど)に関する情報が含まれる場合があります。

同様に、SaltwaterFishクラスは、次のようにオーバーライドメカニズムを使用して、(スーパークラスで定義されているように)繁殖後に魚が仲間を食べるようにmakeBabyFish()メソッドをカスタマイズします。

_public class SaltwaterFish extends Fish  
{  
    @Override  
    public void makeBabyFish(Fish fishSpouse, int numBabies) {  
        // call parent method  
        super.makeBabyFish(fishSpouse, numBabies);  
        // eat mate  
        eat(fishSpouse);  
    }  
}
_
49
samir vora

Override-Annotationは、特定の関数を上書きしたいというコンパイラーのヒントにすぎません。コンパイラは、関数が存在する場合、親クラスとインターフェイスをチェックします。そうでない場合は、コンパイルエラーが発生します。

基本的には単なる安全メカニズムです。

参照については、 この記事 を参照してください(オーバーライドは途中で説明されています)

23
lostiniceland

オーバーライドは、メソッドを定義する場合に主に使用されます。オーバーライドは、その意味に似ています。

Oncreate()メソッドがすでに定義されていて、それに関連するプロパティがある場合を考えてみましょう。また、特定のオブジェクトのコードでOncreate()メソッドを呼び出すと、今作成したコードは、アプリケーションのOncreate()の正式に定義されたプロパティまたは継承されたプロパティをオーバーライドします。

0
vivek