クラス型をフィールドやメソッドに使う
フィールドやメソッドにクラス型を使い、
違うクラスで定義した内容をそのまま情報の一部として使っても問題ない
・フィールドにクラス型を使用する場合
ex.① 剣(Sword)という内容でクラスを定義する
class Sword{
String name;
int damage;
}
② 勇者(Hero)クラスで①の剣(Sword)クラスの情報を使用する
class Hero{
〈フィールド〉
String name;
int hp;
sword Sword; // sword型のSwordクラスの中に記述してある情報が
そのまま代入される
〈メソッド〉
void attack( ){
・・・
};
このように、あるクラスが別のクラスをフィールド(情報)として利用している関係
→has-aの関係
(Hero has-a sword 勇者が剣を持っている)
〈パソコン内でのイメージ(メモリ領域)〉
変数hには1011番地という情報だけ入っている
1011番地に行ってみると、、
Heroの実際の情報が入っている
Hero {name←実際の名前
hp ←実際の値
Sword ←2046番地という番地情報
2046番地に行ってみると、、
Swordの実際の情報が入っている
Sword{name←実際の名前
damage( ) ←実際に使用するメソッドの内容
・ クラス型をメソッドの引数や戻り値に用いる
〈Main(指示)クラス〉
class Main{
static void main(String[ ] args){ // main(指示)メソッド
Hero h1=new Hero( ); //勇者インスタンスの生成
h1.name="太郎"; // インスタンスのフィールドに具体的な値を代入
Hero h2=new Hero( ); //2人目の勇者インスタンスの生成
h2.name="次郎";
Wizard w=new Wizard( ); //魔法使いインスタンスを生成
w.name="花子";
w.heal(h1); // h1"太郎"のhpを回復させるメソッドの呼び出し w.heal(h2); // h2"次郎"のhpを回復させるメソッドの呼び出し
↑どの勇者を回復させるかは引数で使用する変数(h1,h2)で区別できる
}
〈魔法使い(Wizard)インスタンスの金型となるクラス〉
WizardはHeroを回復させる魔法であるhealを使うことが出来るので、
heal( )メソッドの引数でHeroのクラス型を用いる
class Wizard{
フィールド String name;
int hp;
メソッド void heal(Hero){ //引数がHero型
h.hp+=10; //Heroのhpに10を加える(回復させる)
↑ここでは、ブロックの外側のWizardのhpではなく、
別のクラスHeroのフィールドにアクセスするので、
thisではなく、Heroの変数hを使用して指定する
System.out.println(h.name+"のHPを10回復させた!");
}
}