現在のjavaの勉強しております。
そこでフィールドについてどうしてもわからないことがあったので質問させていただきます。
他クラスのメソッドを利用したい時、通常インスタンス化を行いますが、下記のようにフィールドに宣言しても、他クラスのメソッドを利用できることに疑問を感じました。
public class Test{
public String show(){
~~
return null;
}
}
//Testクラスのshowメソッドを呼び出します
public class Test2{
private Test test_;
public String triaezu(){
String str = test_.show();
~~
…
このようにフィールドにもつ呼び出しとインスタンス化をして呼び出す方式とは一体何が違うのでしょうか?
プログラムの先輩方、基礎的なことすぎて申し訳ないのですが、どうかご教授ください。
Test の方からは何も違いがありません。ただどこかから自身に対して show() が呼ばれたからその処理を行うだけです。自身が何らかのクラスのフィールドなのかどうかは自身が何らかの処理をする上では関係ありません。
違いがあるのは Test2 の方です。
Test2 に Test 型のフィールドがあるというのはすなわち Test2 が何らかの Test 型の値の所有権を主張しています。その Test 型の値に対してメソッドを呼び出すという事は、自分の所有物を処理に使うという事になります。
一方、何らかのメソッドの中でインスタンス化してメソッドを呼び出すという事は、一時的に処理に必要なものを作って処理をし、(そのインスタンス化したものをフィールドとして保持しない限り)後のことは知らないという事になります。
また、質問にはあがってはいませんが、メソッドの引数として渡されたものに対してメソッドを呼び出すという事は、誰かから必要なものを借りてきて処理をする事になります。
お礼
なるほど! よく理解できました。ご回答ありがとうございます。