質問: こんにちは。 このHPで初めてJavaの勉強をさせてもらっています。 現在インターフェースの勉強をしているのですが、 (http://www.javaroad.jp/java_interface3.htm) 最後の例題の処理の意味がわかりません。 オブジェクト変数についての理解がまだ乏しいので、 そこの流れなどがあいまいになっています。 メインメソッドを実行すると、 まずspとObject1という2つのObjectを生成し、 showBasicメソッドを実行していますが、 その時引数にオブジェクト変数spを与えています。 これって具体的には、引数として何を与えているのですか?? spはShowProfileクラスのオブジェクトなのですが、 中にはメソッドしかはいっておらず、 showBasicメソッド自体の引数は、 ProfileInterface型のpi変数を与えています。 showBasicメソッドの引数にspを指定してるのに、 showBasicメソッドの引数はProfileInterfaxe型であったり、頭がこんがらがっています。 多分、支離滅裂な文章かも知れませんが、 「Object変数を引数にしたときの具体的な値」や、 「処理の流れに応じて値はどう変わっていくのか」等をご教授お願いします。
回答: ProfileInterface pi = new ShowProfile(); ということが可能、といえば分かってくれるかな。 あと、メソッドが入っているという表現は誤解を招きかねないので使わないほうがいいです。 普通はメソッドが宣言されている、とかいいます。 で、interfaceというのは、そのinterfaceを実装したクラスがinterfaceで宣言したメソッドを実装していることを保証します(実装していなかった場合、コンパイルエラーになる)。 そのため、 ProfileInterface pi = new ShowProfile(); とするとShowProfileクラスのインスタンスをProfileInterfaceのオブジェクトとして扱うことができます。 メソッドに渡すときも同じで、引数の型がProfileInterfaceだった場合、それを実装するクラスのインスタンスなら渡すことができます。 こうすることで、実装の詳細をinterfaceの裏側にカプセル化しています。