- ベストアンサー
Javaのメソッドの使い方について
- Javaのメソッドの利用方法について質問させていただきます。
- 他クラスのメソッドを利用する際に、フィールドに宣言して呼び出す方式とインスタンス化して呼び出す方式の違いについて疑問が生じました。
- ご教授いただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Test の方からは何も違いがありません。ただどこかから自身に対して show() が呼ばれたからその処理を行うだけです。自身が何らかのクラスのフィールドなのかどうかは自身が何らかの処理をする上では関係ありません。 違いがあるのは Test2 の方です。 Test2 に Test 型のフィールドがあるというのはすなわち Test2 が何らかの Test 型の値の所有権を主張しています。その Test 型の値に対してメソッドを呼び出すという事は、自分の所有物を処理に使うという事になります。 一方、何らかのメソッドの中でインスタンス化してメソッドを呼び出すという事は、一時的に処理に必要なものを作って処理をし、(そのインスタンス化したものをフィールドとして保持しない限り)後のことは知らないという事になります。 また、質問にはあがってはいませんが、メソッドの引数として渡されたものに対してメソッドを呼び出すという事は、誰かから必要なものを借りてきて処理をする事になります。
その他の回答 (1)
- Ogre7077
- ベストアンサー率65% (170/258)
例示のプログラムには記載されていませんが、 フィールドは初期化処理されて、インスタンスが格納されているはずです。 でなければ Null 例外が発生しますので。 public class Test2 { private Test test_; public String triaezu(){ test_.show(); } public Test2() { test_ = new Test(); } // コンストラクタで初期化 public void setTest(Test instance) { test_ = instance; } // セッターで初期化 private Test onemore = new Test(); // こんな書き方もあります } というわけで、「インスタンス化してから呼び出す」という点では、 フィールドも通常の変数も、特に違いはありません。
お礼
わかりやすいようにコードまで書いてくださってありがとうございます。 とてもわかりやすかったです! ご回答ありがとうございます。
お礼
なるほど! よく理解できました。ご回答ありがとうございます。