static static Fantastic! vol.4

Java

今回も static static Fantastic! だぜ!

今回もなんだこの仕様は(゜o゜; というものが最後にあります。

間違ってるかもしれないけど興味のある方は実際に動かしてみてください。

では static メソッドのインポートについて見てみましょう。

次のコードは static メソッドをインポートして使おうとしています。

しかし、メソッド名が同じなのでコンパイルエラーになります。

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

なんか前回とよく似ていますね。

ってことは・・ ワイルドカードでのインポートをやめてきっちり指定したほうのメソッドが実行されるに違いない。

Static_sample_4.java を次のように変更してみた。

コンパイルされちゃんと実行されるようになります。

run:
100* 2 = 200
構築成功 (合計時間: 0 秒)

疑り深い私はワイルドカードのインポートを次のよう逆に入れ替えてみました。

これで実行結果が 300 となれば間違いない。

run:
100* 3 = 300
構築成功 (合計時間: 0 秒)

間違いなかった。めでたし、めでたし、とここまでだったら前回から想像される内容だ。

では次のコードではどうだろう?(同じじゃないかよ!)

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

コンパイルエラー!

calc() メソッドがどちらを使えばいいのか解らないからですよね。

先述のようにインポート文を変更すれば解決できるのですが今回はちょっと違ったみかたをします。

calc() メソッドの引数を変更してみます。

メソッドオーバーロードで解決できるか試してみます。

次のようにコードを変更します。

jp\yucchi\static_sample_4\chage.java

このように chage クラスの calc() めそっどの引数を long に変更してみました。

main() メソッドから呼ばれる calc() メソッドの引数は int なのでこれでいけるはず。

さて、どうでしょう?

run:
100* 2 = 200
構築成功 (合計時間: 1 秒)

コンパイルも実行も問題ないですね(^^)

疑り深い私は次のように calc() メソッドの呼び出しを long でやってみました。

コンパイル、実行がちゃんとできるでしょうか?

run:
100* 3 = 300
構築成功 (合計時間: 0 秒)

問題ないですね。ばっちりOKです。

では、最後に面白いコードを(^^)

ゆっくり画面をスクロールさせてどうなるか考えてみてください。

このプログラムの動作が理解できたらあなたは static import を良く理解できているでしょう。

 

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

run:
10000* 2 = 20000
構築成功 (合計時間: 0 秒)

コンパイルも実行もされます。

calc() メソッドの引数は int で同じなのにね(゜o゜;

でも、実行結果が・・・

chage クラスの VAL が優先されるから実行結果は 2 となると思っていた。

static import 奥が深いぜ!

誰か詳しく優しく説明しておくれ~

Hatena タグ:

 


« »

Comment

  1. 誰も釣られてくれないから答えを投稿しました。

    返信

Leave a Reply

* が付いている項目は、必須項目です!

次の HTML タグと属性を利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*

Trackback URL