誕生日にもらった意外なもの

基礎的なお話になるかと思いますが、どなたかお分かりになる方がいらっしゃいましたら教えて下さい。
Java の資格試験の問題で不明な点が出てきました。
問題文は次の通りです。
(私自身はJava Silverを持っていますが、Javaの開発はあまり経験がありません。Silver取得はかなり以前の話です)。

オラクル認定資格教科書 JavaプログラマGoldSE8 山本道子著 P523 問題20
「次のコード(抜粋)があります。

3.public static void main(String[] args){
4. 【①】
5.}
6.static<T extends Exception> void foo(T t){
7. System.out.println(t.getMessage());
8.}

コンパイル、実行がともに成功する①に挿入可能なコードとして正しいものは次のどれですか。3つ選択して下さい。

□A.Test.<NullPointerException>foo(new NullpointerException("ex"));
□B.Test.<Throwable>foo(new Exception("ex"));
□C.Test.foo(new Throwable("ex"));
□D.Test.foo(new IOException("ex"));
□E.Test.foo(new Exception("ex"));


回答は次の通りです。
「問題20 正解:A,D,E

 6行目により、foo()メソッドの引数はExceptionもしくはそのサブクラスであれば受取可能です。メソッド呼び出し時に使用する型名の明示的な宣言は必要ありませんが選択肢Aのようにメソッド名の前に型宣言をすることも可能です。選択肢B,CのThrowableは、Exceptionのスーパークラスになるため誤りです。選択肢DのIOExceptionはExceptionのサブクラスであるため正しいです。


問題の論旨としては、ジェネリクスの理解を問う問題となります。
本題のジェネリクスの理解については解説の通り理解しましたが、私が疑問に思っているのは①の文中にTest.foo(〜);が出てくることです。

これは問題の文中に
1.class Test(){
などの記述が宣言されていて、そのクラス内でのfooが呼び出されたのだとぱっと思ったのですが、もしこれであるならば、自クラスでの自メソッド呼び出しならば普通にfoo(〜);だけ記載すればいいだろうと思うのに、なぜ"Test."を明示的にわざわざつけなければいけないのかと言うことです。

Silverを取ったのがかなり前ですので、基礎的な知識が抜け落ちてしまっているのだと思います。
これを補強するために上記の疑問を解決しておきたいのですが、どなたかお分かりになる方がいらっしゃいましたらご教授頂けると幸いです。

宜しくお願いいたします。

A 回答 (1件)

staticメソッドだからでしょう。

    • good
    • 1
この回答へのお礼

なるほど! 
早期の回答頂きありがとうございました。 すっきりしました!

お礼日時:2020/07/21 08:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報