(Javaの初心者、昔はC#の男。)
Androidのサンプルコードで@Override
の使用が多いことに気付きました。すべてのJavaメソッドはデフォルトで「仮想」だと思いましたか?
@Override
はどうしますか?
例:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
これは、コンパイラーとIDEに、その注釈を持つメソッドがスーパークラスメソッドのオーバーライドになることを意図していることを伝えるために使用できる注釈です。たとえば、メソッドをオーバーライドしようとしてもスペルを間違えた場合、注釈がある場合はIDEまたはコンパイラがnotであることを通知します事実、スーパークラスメソッドをオーバーライドしているため、理由を特定し、スペルミスを修正できます。
これは、たとえばAndroidアプリケーションとアクティビティの場合、すべての呼び出しがアクティビティライフサイクルに基づいている場合に重要です。ライフサイクルメソッドを適切にオーバーライドしないと、取得されません。すべてが正常にコンパイルされますが、アプリは意図したとおりに機能しません。注釈を追加すると、エラーが発生します。
_@Override
_プロセスについて本当に理解したい初心者向けのこのコード、これはあなたを助けます! (Javaの継承の概念を思い出してください。)
たとえば、Fish
クラスには、FreshwaterFish
とSaltwaterFish
の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);
}
}
_
Override-Annotationは、特定の関数を上書きしたいというコンパイラーのヒントにすぎません。コンパイラは、関数が存在する場合、親クラスとインターフェイスをチェックします。そうでない場合は、コンパイルエラーが発生します。
基本的には単なる安全メカニズムです。
参照については、 この記事 を参照してください(オーバーライドは途中で説明されています)
オーバーライドは、メソッドを定義する場合に主に使用されます。オーバーライドは、その意味に似ています。
Oncreate()メソッドがすでに定義されていて、それに関連するプロパティがある場合を考えてみましょう。また、特定のオブジェクトのコードでOncreate()メソッドを呼び出すと、今作成したコードは、アプリケーションのOncreate()の正式に定義されたプロパティまたは継承されたプロパティをオーバーライドします。