web-dev-qa-db-ja.com

Android Studioでの@overrideの意味

私はAndroid Studioに完全に慣れていないので、@OverrideステートメントAndroid Studio。

47
user359187

@Overrideは Javaアノテーション です。次のメソッド オーバーライド のメソッド スーパークラス であることをコンパイラに伝えます。たとえば、Personクラスを実装するとします。

public class Person {
   public final String firstName;
   public final String lastName;

   //some methods

   @Override public boolean equals(Object other) {
      ...
   }
}

Personクラスにはequals()メソッドがあります。 equalsメソッドは、Personのスーパークラス Object で既に定義されています。したがって、上記のequals()の実装は、Personsのequals()の再定義です。つまり、Personはequals()をオーバーライドします。

明示的に注釈を付けずにメソッドをオーバーライドすることは正当です。それでは、@ Overrideアノテーションは何に適していますか?誤ってequals()をオーバーライドしようとした場合:

public boolean equals(Person other) {
   ...
}

上記のケースにはバグがあります。 equals()をオーバーライドするつもりでしたが、そうしませんでした。どうして?実際のequals()はObjectをパラメーターとして取得し、equals()はPersonをパラメーターとして取得するためです。コンパイラーは、ユーザーがオーバーライドしたいかどうかを知らないため、バグについては通知しません。コンパイラーが知る限り、実際には overload equals()を意味します。しかし、@ Overrideアノテーションを使用して等号をオーバーライドしようとした場合:

@Override public boolean equals(Person other) {
   ...
}

これで、コンパイラはエラーがあることを認識します。オーバーライドしたいが、そうしなかった。したがって、@ Overrideアノテーションを使用する理由は、メソッドのオーバーライドを明示的に宣言するためです。

85
snakile

そのa Java注釈(Android固有ではない)。このメソッドがメソッドをオーバーライドすることを意味するために使用します。

それを使用する理由は、メソッドをオーバーライドする予定のメソッドを作成するときにエラーをキャッチするためですが、何らかのエラーを介してnotを実行します。メソッド名のタイプミス、メソッドの署名のエラーなど。たとえば、開発者がこれを行う場合があります。

class Foo { 
    public boolean equals(Foo other) {
       ...

著者は、これをスーパークラスのequalsメソッドをオーバーライドすることを意図していましたが、そうではありません(パラメータータイプはObjectでなければなりません)。プログラムは正常にコンパイルされますが、作成者が意図したFoo.equalsは使用しません。

class Foo {
    @Override
    public boolean equals(Foo other) {
       ...

メソッドは別のメソッドをオーバーライドしないため、コンパイルでエラーが発生します。これにより、問題が早期に指摘され、問題を追跡するデバッグ時間を節約できることを期待しています。

20
Bert F

これは、メソッドがスーパークラスからのメソッドをオーバーライドすることをコンパイラに指示するJavaアノテーションです。厳密に必要というわけではありませんが、コンパイル時にエラーをキャッチするのに役立ちます。

7
trojanfoe

@Override は、Java annotation です。

メソッド宣言がスーパークラスのメソッド宣言をオーバーライドすることを意図していることを示します。メソッドにこの注釈タイプの注釈が付けられているが、スーパークラスメソッドをオーバーライドしない場合、コンパイラはエラーメッセージを生成する必要があります。

も参照してください

例:

class Parent{
    public void foo(){

    }
}

class Child extends Parent{
    //compile perfect !
    @Override
    public void foo(){

    }
    //will show compile time error message here as it is not being overridden 
    @Override
    public void foo(int i){

    }

}
4
Jigar Joshi

これは、Javaの 注釈 です。このメソッドは、スーパークラスのメソッドをオーバーライドすることを意味します。

2
Jonas

これは、コンパイラによって予約された特別なものです。Javaアノテーションは、スーパークラスメソッドをオーバーライドしていることを示します。

0
Brandon