4

これは初心者の質問です。JVMの実行は、階層の最下位クラスからメソッド名を検索することから始まり、そのクラスでメソッドが使用できない場合、メソッドを探している親クラスにトラバースすることを読みました。

この場合、継承されたクラスにカスタム ロジックを追加するために "@override" を使用する必要があるのはなぜですか?

以下の例は私の質問を示しています

class superclassA
{

method()
{
}

}

class subclassB extends superclassA
{

@Override 
//While executing if JVM starts looking for the method name from the lowest hierarchy
//then why do we have to use "override" as the methodname will be matched from the lowest level itself?
method() 
{
--custom subclass specific code...
} 

}
4

3 に答える 3

5

この場合、継承されたクラスにカスタム ロジックを追加するために「@override」を使用する必要があるのはなぜでしょうか。

私たちはしません。@Override注釈には技術的な意味はありません。このメソッドがスーパークラスのメソッドをオーバーライドするという事実を文書化するために存在し、いくつかの利点があります

  • コードを見ると、このメソッドの機能を理解するために重要なスーパークラス メソッドがあることがわかります。
  • スーパークラス メソッドのシグネチャが変更され、サブクラス メソッドが実際にそれをオーバーライドしなくなった場合、コンパイラ エラーが発生します。
  • アノテーションを使用せずにメソッドをオーバーライドすると、誤ってオーバーライドした場合にコンパイラの警告が表示されることがあります。
于 2013-07-26T13:31:20.737 に答える
2

@Override は、単に Java コンパイラがソース コードのエラーを検出するのに役立ちます。@Override で注釈が付けられたメソッドが実際にメソッドをオーバーライドしない場合、コンパイラはエラーを生成します。

@Override でスーパータイプ メソッドをオーバーライドするメソッドにアノテーションを付けることは必須ではありません。

于 2013-07-26T13:29:59.310 に答える
1

必要あり ません@Override。しかし、これは、あなたが言うメソッドを本当にオーバーライドしているかどうかをコンパイラーにチェックさせる便利なアノテーションです。実際に@Overrideはメソッドをオーバーライドしていないメソッドを使用すると、コンパイラはこの不一致を通知します。さらに、コードをより明確にするだけです。Java のすべてのメソッドは暗黙的に仮想であり、クラスの非finalメソッドと同じ署名を持つ派生クラスのメソッドはsuper暗黙的にそれをオーバーライドするため1、追加@Overrideするとコードが簡単になります。人間が理解できるように。

1 : 明確にするために、スーパークラスのメソッドと同じシグネチャを持つ派生クラスのメソッドを持つことはできません。final

于 2013-07-26T13:29:04.380 に答える