0
0

クラス型 フィールド メソッド引数 戻り値

Posted at

has-aの関係

フィールドにクラス型の変数を宣言する
あるクラスが別のクラスをフィールドとして利用している関係

Sword.java
public class Sword
 String name; // 剣の名前
 int damage; // 
Hero.java
public class Hero {
String name;
int hp;
Sword sword; // 勇者が装備している剣の情報
public void attack() {
 System.out.println(this.name + "は攻撃した!");
 System.out.println("敵に5ポイントのダメージをあたえた!");
}
}

Heroクラスに新しく追加されたフィールド「Sword」は、int型やStirng型ではなくSword型
フィールドにクラス型の変数を宣言ができる
Hero has-a Sword(勇者は剣を持っている)

Main.java
public class Main {
 public static void main(String[] args) {
  Sword s = new Sword();
  s.name = "炎の剣";
  s.damage = 10;
  Hero h = new Hero();
  h.name = "ミナト";
  h.hp= 100;
  h.sword = s; // swordフィールドに生成済みの剣インスタンス(番地)を代入
  System.out.println("現在の武器は" + h.sword.name); // 勇者「の」剣「の」名前
 } 
}
結果.
現在の武器は炎の剣

クラス型をメソッド引数や戻り値に用いる

クラス型はフィールドの型に用いるだけではなく、メソッドの引数や戻り値にも利用できる

Wizard.java
public class Wizard {
 String name;
 int hp;
 public void heal(Hero h) { // 引数はHero型
  h.hp += 10; // 勇者のHPに10を加える
  System.out.println(this.name + "が" +h.name + "のHPを10回復した");
  System.out.println(h.name + "のHPが" + h.hp + "になった");
 }
}
Hero.java
public class Hero{
 String name;
 int hp;
}

healメソッドが呼び出されると、魔法使いインスタンスは勇者のHPを10回復させる。呼び出されるときに「どの勇者を回復するのか」を引数hとして受け取る必要がある

Main.java
public class Main {
 public static void main(String[] args) {
  Hero h1 = new Hero();
  h1.name = "ミナト";
  h1.hp = 100;
  Hero h2 = new Hero();
  h2.name = "アサカ";
  h2.hp = 100;
  Wizard w = new Wizard();
  w.name = "スガワラ";
  w.hp = 50;
  w.heal(h1);
  w.heal(h2);
 } 
}
スガワラがミナトのHPを10回復した
ミナトのHPが110になった
スガワラがアサカのHPを10回復した
アサカのHPが110になった

参考にした本↓↓ わかりやすいです:relaxed:

すっきりわかるJava入門

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0