Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

オブジェクト変数について

こんにちは。
この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変数を引数にしたときの具体的な値」や、
「処理の流れに応じて値はどう変わっていくのか」等をご教授お願いします。

5

回答

3064

閲覧

5件の回答

評価

0

ProfileInterface pi = new ShowProfile();
ということが可能、といえば分かってくれるかな。
あと、メソッドが入っているという表現は誤解を招きかねないので使わないほうがいいです。
普通はメソッドが宣言されている、とかいいます。

で、interfaceというのは、そのinterfaceを実装したクラスがinterfaceで宣言したメソッドを実装していることを保証します(実装していなかった場合、コンパイルエラーになる)。
そのため、
ProfileInterface pi = new ShowProfile();
とするとShowProfileクラスのインスタンスをProfileInterfaceのオブジェクトとして扱うことができます。
メソッドに渡すときも同じで、引数の型がProfileInterfaceだった場合、それを実装するクラスのインスタンスなら渡すことができます。

こうすることで、実装の詳細をinterfaceの裏側にカプセル化しています。

評価

0

ひとつのサイトの表現が分かりづらいのなら、他の同様のサイトも当たってみると良いですよ。
必ずしも万人に分かる書き方だとは限らないし、そうである必要もないのだから。

評価

0

interface 協栄ジム {
  public void 会長();
  public List 所属選手一覧();
  public List 謹慎選手一覧();
}
interface グリーン津田ジム {
   public Date 契約不履行日();
}

public class 亀田 
   implements 協栄ジム , グリーン津田ジム {

   String kaicho = "オトン";
   String kouki = "コウキ";
   String daiki = "ダイキ";
   String tomoki = "トモキ";
   String imouto = "イモウト";

   public 亀田() {

   }

   public void 妹の存在() {

   }

   protected void 母の存在() {

   }

   public void 会長() {
      
   }
   public List 所属選手一覧() {
      List list = new ArrayList();
      list.add( kouki );
      list.add( tomoki );
      return list;
   }
   public List 謹慎選手一覧() {
      List list = new ArrayList();
      list.add( daiki );
      return list;
   }         
   public Date 契約不履行日() {
     return new Date("2007/02/01"); 
   }
}

亀田は、立場的に、グリーン津田ジムを名乗ることも
できるし、共栄ジムを名乗ることも出来る。
もちろん、亀田として名乗れば、すべての亀田の資産
を参照・変更も可能。

例)
public static void main(String[] args) {
   亀田 kameda = new 亀田();
   協栄ジム kyoei = kameda;
   グリーン津田ジム tuda = kameda;

   kyoei.会長();
   tuda.契約不履行日();   
}

public void 亀田の津田ジム(グリーン津田ジム tuda) {
   
}

public void 亀田の協栄ジム(協栄ジム kyoei) {

}
public void 亀田は亀田ジム(亀田 kameda) {

}

3つの関数に new 亀田() を引数として渡すことが
できる。
new 亀田() したとき、それぞれの関数内では、
インターフェースを引数として定義した関数で
はそのインターフェースで利用可能なメソッド
のみが利用できる。
2つのインターフェースを実装する、亀田クラス
を引数とすれば、インターフェースの実装のみ
ならず、すべての亀田の情報を知ることができる。

母の存在() メソッドに関しては、亀田と親密な
関係になるか、亀田一門に下る必要がある、
この「下り」こそ、「派生クラス」ということ。

評価

0

大樹、よくやった。これからはプログラマとして出直せ。

評価

0

皆様返信ありがとうございます。
わかりやすく説明していただいたおかげで
前よりも大分理解することができました。
ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。