JAVA 継承(P441 11.7練習問題回答)

▪️Main22.java

```java

public class Main22 {
	public static void main(String[] args) {
		Hero2 h = new Hero2("ねこ５");
		Hero2 h1 = new Hero2("ミナト");
		Hero2 h2 = new Hero2("ねこ");
		Hero2 h3 = new Hero2("ねこ7");
		Wand w = new Wand("杖");
		System.out.println(w.getName());
		Wizard2 wz = new Wizard2("魔女11");
		SuperHero sh = new SuperHero("ヒーロー");
		SuperHero sh2 = new SuperHero("");
		Weapon we = new Weapon();
		Item i = new Item("");
		PoisonMatango pm = new PoisonMatango('A');
		pm.setSuffix('B');
		System.out.println(pm.getSuffix() + "はPoisonMatango、pmの名前");
		w.setName("ねこ34");
		sh.setName("スーパーヒーロー");
		System.out.println(sh.getName() + "SuperHeroの名前");
		System.out.println(we.getName() + "weaponの名前");

		sh.run();
		sh.fly();
		sh.sleep();
		sh.slip();
		// h1.hp = 200;
		// h2.hp = 500;
		// wz.heal(h);
		h3.sleep();
		h3.sit(4);

		King k = new King();
		k.talk(h);

		// System.out.println(Hero2.name);
		System.out.println(h2.getName());
		System.out.println(h3.getName());
		h.setName("ねこ８");

		System.out.println(w.getName());
		w.setName("Stick");
		System.out.println(w.getName());
		System.out.println(w.getPower());
		w.setPower(3);
		System.out.println(w.getPower());
		wz.setName("魔女2");
		System.out.println(wz.getName());
		// System.out.println(h1.hp);
		// Hero2.money = 400;
		// System.out.println(Hero2.money);
		// System.out.println(h1.money);
		// h2.money = 30;
		// System.out.println(h1.money);
		// System.out.println(Hero2.money);
		// System.out.println(h1.money + h2.money);
		System.out.println(Hero2.money);
		// Hero2.setRandomMoney();
		System.out.println(Hero2.money);
		// Hero2 h1 = new Hero2();
		System.out.println(h1.money);
		System.out.println(Hero2.money);

		// System.out.println(h1.hp);
		// System.out.println(h2.hp);

		Matango2 m1 = new Matango2();
		Matango2 m2 = new Matango2("ねこ３");
		m2.hp = 30;
		System.out.println(m1.name);
		System.out.println(m2.hp);
		System.out.println(m2.name);

		h2.setName("ねこ13");
		System.out.println(h2.getName());
		System.out.println(h2.getName() + "のヒーローポイントは" + h3.getHp() + "です");

		// m1.hp = 50;
		// m1.suffix = 'A';

		// Matango2 m2 = new Matango2();
		// m2.hp = 48;
		// m2.suffix = 'B';

	}

}
```

▪️Matango2.java

```java

public class Matango2 {
	int hp = 50;
	final int LEVEL = 10;
	private char suffix;
	int sleepPoint;
	String name;

	public Matango2(char suffix) {
		this.suffix = suffix;
	}

	Matango2(String name) {
		this.hp = 10;
		this.name = name;
	}

	Matango2() {
		this("ダミー２");
	}

	void run() {
		System.out.println("お化けキノコ" + this.suffix + "は逃げ出した！");
	}

	public void setSuffix(char suffix) {
		this.suffix = suffix;
	}

	public char getSuffix() {
		return this.suffix;
	}

	void sleep(int sleepPoint) {
		hp += sleepPoint;
		System.out.println("お化けキノコ" + this.suffix + "は" + sleepPoint + "眠った!" + this.hp + "ポイント回復した！");
	}

	public void attack(Hero2 h) {
		System.out.println("キノコ" + this.suffix + "の攻撃");
		System.out.println("10のダメージ");
		h.setHp(h.getHp() - 10);

	}

}
```

▪️PoisonMatango.java

```java

public class PoisonMatango extends Matango2 {
	private int poisonCount = 5;

	public PoisonMatango(char suffix) {
		super(suffix);
	}

	public void attack(Hero2 h) {
		super.attack(h);

		if (this.poisonCount > 0) {
			System.out.println("更に毒の胞子をばらまいた！");
			int dmg = h.getHp() / 5;
			h.setHp(h.getHp() - dmg);
			System.out.println(dmg + "ポイントのダメージ");
			poisonCount--;
		}

	}

}
```

▪️Hero2.java

```java

public class Hero2 {
	private String name;
	private int hp;
	static int money;
	// Sword2 sword;
	static int money2;

	public int getHp() {
		return this.hp;
	}

	public void setHp(int hp) {
		this.hp = hp;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		if (name == null) {
			throw new IllegalArgumentException("名前がnullである。処理を中断。");

		}
		if (name.length() <= 1) {
			throw new IllegalArgumentException("名前が短すぎる。処理を中断。");
		}
		if (name.length() >= 8) {
			throw new IllegalArgumentException("名前が長すぎる。処理を中断。");
		}
		this.name = name;
		System.out.println(this.name);
	}

	Hero2(String name) {
		this.hp = 100;
		this.name = name;
	}

	Hero2() {
		this("ダミー");
		System.out.println("Hero2のコンストラクタが動作");
	}

	void setRandomMoney() {
		Hero2.money = (int) (Math.random() * 1000);
		System.out.println(name + "たちの所持金を初期化しました");
	}

	//
	public void attack() {
		System.out.println(this.name + "は攻撃した！");
		System.out.println("敵に5ポイントのダメージを与えた！");
	}

	public void attack(Matango2 m) {

	}

	void sleep() {
		this.hp = 100;
		System.out.println(this.name + "は、眠って回復した！");

	}

	void sit(int sec) {
		this.hp += sec;
		System.out.println(this.name + "は、" + sec + "秒座った！");
		System.out.println("HPが" + sec + "ポイント回復した.");

	}

	private void die() {
		System.out.println(this.name + "は死んでしまった！");
		System.out.println("GAME OVERです。");
	}

	void slip() {
		this.hp -= 5;
		System.out.println(this.name + "は、転んだ！");
		System.out.println("5のダメージ！");

	}

	void run() {
		System.out.println(this.name + "は、逃げ出した！");
		System.out.println("GAMEOVER");
		System.out.println("最終HPは" + this.hp + "でした");

	}
}
```

▪️実行結果
杖
SuperHeroが生成されました
SuperHeroのコンストラクタが動作
SuperHeroが生成されました
SuperHeroのコンストラクタが動作
BはPoisonMatango、pmの名前
ヒーローSuperHeroの名前
ななしの剣weaponの名前
ヒーローは撤退した
飛び上がった!
ヒーローは、眠って回復した！
ヒーローは、転んだ！
5のダメージ！
ねこ7は、眠って回復した！
ねこ7は、4秒座った！
HPが4ポイント回復した.
王様:ようこそ我が国へ、勇者ねこ５よ
王様:長旅疲れたであろう。
王様:まずは城下町を見てくるとよい。ではまた会おう。
ねこ
ねこ7
ねこ８
ねこ34
Stick
65.2
3.0
魔女2
0
0
0
0
ダミー２
30
ねこ３
ねこ13
ねこ13
ねこ13のヒーローポイントは104です