Javaオリジナル問題作成3（Java入門編：スッキリわかるJava）

###Javaオリジナル問題作成2の続きです。

#12章（高度な継承）
■問題１
heroパッケージ作成してください。（以下のすべてのクラスはここに格納）
Heroクラス（抽象クラス）を作成し、attack(抽象メソッド),guard(抽象メソッド)を作成してください。
Aheroクラス（Heroクラスを継承）を作成し、attack（内容：A攻撃）、guard（内容：A防御）を作成してください。
Bheroクラス（Heroクラスを継承）を作成し、attack（内容：B攻撃）、guard（内容：B防御）を作成してください。
Mainクラスを作成し、Ahero,Bheroのメソッドを表示させてください。

■問題２
creatureパッケージ作成してください。（以下のすべてのクラスはここに格納）
Creatureクラス（インタフェース宣言）を作成し、runメソッドを追加してください。
BattleCreatureクラス（Creatureクラスを継承し、インタフェースを宣言）を作成し、attackメソッド追加してください。
Goblinクラス（BattleCreatureクラスを実装）を作成し、runメソッド（内容：ゴブリンは逃げた）、attackメソッド（内容：ゴブリンは攻撃した）をオーバーライドさせてください。
Mainクラス作成し、run,attackメソッドを表示させてください。

解答

```java:Main.java
//問題１
package hero;

public class Main {

        public static void main(String[] args) {
                // TODO 自動生成されたメソッド・スタブ
                Ahero a = new Ahero();
                a.attack();
                a.guard();

                Bhero b = new Bhero();
                b.attack();
                b.guard();
        }
}



//実行結果
A攻撃
A防御
B攻撃
B防御


```

```java:Hero.java
package hero;

public abstract class Hero {
        public abstract void attack();

        public abstract void guard();
}

```
```java:Ahero.java
package hero;

public class Ahero extends Hero {

        @Override
        public void attack() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("A攻撃");
        }

        @Override
        public void guard() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("A防御");

        }

}


```
```java:Bhero.java
package hero;

public class Bhero extends Hero {

        @Override
        public void attack() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("B攻撃");
        }

        @Override
        public void guard() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("B防御");
        }

}

```
<br>
<br>


```java:Main.java
//問題2
package creature;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Goblin g = new Goblin();
		g.run();
		g.attack();
	}

}



//実行結果
ゴブリンは逃げた
ゴブリンは攻撃した


```

```java:Creature.java
package creature;

public interface Creature {

        void run();
}


```
```java:BattleCreature.java
package creature;

public interface BattleCreature extends Creature {
        void attack();
}
```
```java:Goblin.java
package creature;

public class Goblin implements BattleCreature{

        @Override
        public void run() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("ゴブリンは逃げた");
        }

        @Override
        public void attack() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("ゴブリンは攻撃した");
        }

}
```



#13章（多態性）
■問題１
monsterパッケージ作成（以下のすべてのクラスはここに格納）
Monsterクラス（インターフェイスを宣言し）作成し、runメソッド（抽象メソッド）を追加してください。
Slimeクラス（Monsterクラスを実装）作成し、runメソッド（内容：スライムは逃げた）を追加してください。
Goblinクラス（Monsterクラスを実装）作成し、runメソッド（内容：ゴブリンは逃げた）を追加してください。
DeathBatクラス（Monsterクラスを実装）作成し、runメソッド（内容：地獄コウモリは逃げた）を追加してください。

Mainクラスを作成し、runメソッド一行で各内容を呼び出してください。

ヒント
・Monster配列作成（要素３つ）
・要素に各インスタンス挿入。
・拡張for文でrunメソッド呼び出す。


解答

```java:Main.java
//問題１
package monster;

public class Main {

        public static void main(String[] args) {
                // TODO 自動生成されたメソッド・スタブ
                Monster[] monsters = new Monster[3];
                monsters[0] = new Slime();
                monsters[1] = new Goblin();
                monsters[2] = new DeathBat();

                for (Monster mo : monsters) {
                        mo.run();
                }
        }

}



//実行結果
スライムは逃げた
ゴブリンは逃げた
地獄コウモリは逃げた
```

```java:Monster.java
package monster;

public interface Monster {
         void run();
}
```

```java:Slime.java
package monster;

public class Slime implements Monster {

        @Override
        public void run() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("スライムは逃げた");
        }

}
```
```java:Goblin.java
package monster;

public class Goblin implements Monster {

        @Override
        public void run() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("ゴブリンは逃げた");

        }

}
```
```java:DeathBat.java
package monster;

public class DeathBat implements Monster {

        @Override
        public void run() {
                // TODO 自動生成されたメソッド・スタブ
                System.out.println("地獄コウモリは逃げた");

        }

}
```

[Javaオリジナル問題作成1（Java入門編：スッキリわかるJava](https://qiita.com/freelanceradiation/items/2e24cd4f00de7796d807)

[Javaオリジナル問題作成2（Java入門編：スッキリわかるJava](https://qiita.com/freelanceradiation/items/60fe227910532bb9db79)

###次回に続く

[Javaオリジナル問題作成4（Java入門編：スッキリわかるJava](https://qiita.com/freelanceradiation/items/a48febf59c95ec186ca3)