質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Java

    14111questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

[Java]@Override、@Testってただの目印の様なものですか。

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 584
退会済みユーザー

退会済みユーザー

アノテーションによっては書かないと、不具合が発生するものがありますが、@Override、@Testに関しては、なくてもメソッドのオーバーライドできるし、テストも動作します。やっぱりただの目印ですか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

プログラミングの際に、ミスに気づきやすくなる、そのアノテーションの部位で設計者が意図したことが読みやすい、などのメリットがあります。
@Overrideの場合、正しくオーバーライドされていない場合にコンパイルエラーになります。アノテーションがない場合は別メソッドとして認識されるだけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/22 17:45

    お手数ですが、
    > アノテーションがない場合は別メソッドとして認識されるだけです。

    の意味を教えていただけますでしょうか?

    おっしゃる通り、@Overrideアノテーションを付けると
    > 正しくオーバーライドされていない場合にコンパイルエラー

    となりますが、
    正しくオーバーライドされているメソッドにこのアノテーションを付けなかったとしても、コンパイルの可否やプログラムの動作には影響はなかったと認識しておりますので。。

    キャンセル

  • 2016/05/22 17:54 編集

    その通りです。しかし、プログラマとしてはオーバーライドしたつもりで書いていても実際そうなっていない場合、実行するまでそのミスに気づけないことになります。
    kentei_syunrai様のリンクの通り、例えばメソッド名が違っていたら別名のメソッドとしてコンパイルが通りますし、引数の数や種類が違えばオーバーロードとしてこれまたコンパイルが通ります。いずれにせよ、ミスに気づかないままコンパイルが通ってしまうのです。
    この@Overrideアノテーションは、正しくオーバーライドされていることをコンパイラが保証していると考えるとわかりやすいでしょうか。

    キャンセル

  • 2016/05/22 18:01 編集

    ようやく理解しました。
    > (正しくオーバーライドされていない場合に)アノテーションがない場合は別メソッドとして認識されるだけです。

    ということですね?

    ()部分を(正しくオーバーライドされているメソッドに)と脳内補完していたため、誤読していましたw

    お手数おかけして申し訳ありません。

    キャンセル

  • 2016/05/22 18:04

    いえいえ。
    私こそ、言葉足らずで申し訳ないです。

    キャンセル

checkベストアンサー

0

@Overrideアノテーションは、そのメソッドがスーパークラスのメソッドをオーバーライドしていることをコンパイラに伝えるためのアノテーションです。
https://docs.oracle.com/javase/jp/6/api/java/lang/Override.html
そのため、オーバーライドしていないメソッドに対してこのアノテーションを付けると、コンパイルエラーとなります。

swordone様の回答にある通り、

ミスに気づきやすくなる

ためのアノテーションです。


@Testアノテーションは、それがテストメソッドであることを JUnit に伝えるためのアノテーションです。

古いバージョンの JUnit では test***という名前のメソッドだけがテストメソッドだとみなされましたが、
JUnit4 からは、このアノテーションを付けたメソッドが(どのような名前であっても)テストメソッドだとみなされるようになっています。
http://junit.sourceforge.net/javadoc/org/junit/Test.html

@Overrideとは用途が異なり、こちらはフレームワークに対して「それが何を意味するものなのか」を伝えるためのアノテーションと言えます。

ところで、私もうろ覚えで恐縮なのですが、

テストも動作します。

について、Junit4以降では@Testアノテーションを付けないとテストメソッドだとみなされなかったように記憶していますが、、

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

下のリンク先が参考になるかと。

Java @Override アノテーション活用法

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    Swift 継承したクラスのメソッドを上書きできますか?

    プログラミング初心者です。 HTML/CSSとJavaScriptを使ってプログラミングしているくらいの者です。 Swiftの基本的な文法を現在勉強しています。 クラス辺りで分から

  • 解決済

    facebookログインする際にCallbackされない

    frangmentにてログインボタンを表示し、 それをクリックすることでfacebookログインをしようとしているのですが、callbackされません。 最初、facebook

  • 解決済

    Java

    public class SuperClass{ private int num = 10; void test(){ System.out.pri

  • 解決済

    異なるView Controllerでの値(変数)の共有

    この画像の二つのViewControllerで値を共有したいのですが、ViewController2のラベルに表示されるはずの100が表示されず、消えるはずのラベルが表示されたまま

  • 解決済

    Java サーブレットをeclipseで実行

    Eclipseでサーブレットを実行したい 発生している問題・エラーメッセージ ブラウザが開く前に、ファイルを保存しますか というメッセージがでる。 該当のソースコード im

  • 解決済

    SwiftでViewController間のdelegateをする方法

    前提・実現したいこと SwiftでViewController間でdelegateをしようと思ってるいるのですが、うまく行きません。 コードでは、SecondViewContr

  • 解決済

    tabBarItemのタイトルを変更したい

    前提・実現したいこと あるViewControllerを表示する時、tabBarItemのタイトルを変更したいのですが、方法がわかりません。 下記では変更できませんでした。

  • 解決済

    フレームへの描画がうまくいきません。

     前提・実現したいこと 描画をしたいのですが、うまく表示されません。 描画について解説されてるサイトのコードを丸写ししても表示されないので全くわからなくなっています。  該当の

同じタグがついた質問を見る

  • Java

    14111questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。