インターフェースとポリモーフィズム(多態性)
Java練習問題 第15回では「インターフェース」についての問題を用意してあります。
「インタフェース」の解説はこちら
問題 1 難易度 ★★★★
以下の内容の手順に従ってプログラムを作成してください。
STEP 1
抽象クラス Creature(生物)を、以下のように定義してください。
① int 型の age(年齢)、String 型の name(名前)、double 型の weight(体重)を、フィールドとして定義してください。
② 各フィールドに対応するゲッターメソッドを定義してください。
③ age,name,weight を引数とするコンストラクタを定義してください。
④ eat()、walk()の二つの抽象メソッドを定義してください。
⑤ showStatus()メソッドを定義してください。
⑥ showStatus()メソッドは実行されると「ペン太郎(2 才:2.0kg)」のように、名前、年齢、体重を出力します。
STEP 2
① Creature を継承した抽象クラス Bird(鳥類)クラスを定義し、walk()メソッドを実装してください。walk()メソッドは実行すると「**は二本足で歩いた」と出力します。
② Creature を継承した抽象クラス Reptile(爬虫類)を定義し、walk()メソッドを実装してください。walk()メソッドは実行すると「**は四本足で歩いた」と出力するようにします。
STEP 3
Swimmable(泳げる)インターフェイスを作成し、以下の2つの抽象メソッドを定義してください。
・水に入る enterWater()メソッド
・水から出る outWater()メソッド
STEP 4
① Swimmableインターフェースを実装しBirdクラスを継承したPenguin(ペンギン)クラス定義してください。
② Swimmableインターフェースを実装しReptileクラスを継承したMarineTurtle(ウミガメ)クラスを定義してください。
※抽象メソッドの実装は、下記実行例を参考にして記述してください。
STEP 5
① main メソッドの処理で、PenguinクラスとMarineTurtleクラスをインスタンス化してください。
② 各インスタンスのshowStatus(),walk(),enterWater(),eat(),outWater()メソッドを実行してください。
STEP 6
① Creature 型の配列を宣言し、PenguinインスタンスとMarineTurtle インスタンスを格納してください。
② 繰返し文を用いて配列内のインスタンスから、showStatus(),walk(),eat() を呼び出してください。
STEP 7
① Swimmable 型の配列を宣言し、Penguin インスタンスと MarineTurtle インスタンスを格納して ください。
② 繰返し文を用いて配列内のインスタンスから、enterWater(),outWater() を呼び出してください。
実行例
ペン太郎(2 才:2.0kg)
ペン太郎は二本足で歩いた
ペン太郎は氷上から海に飛び込んだ。
ペン太郎は魚を食べた。
ペン太郎は海から氷上に飛び乗った。
カメ次郎(8 才:8.0kg)
カメ次郎は四本足で歩いた
カメ次郎は砂浜から海に入った。
カメ次郎は海草を食べた。
カメ次郎は海から砂浜に上がった。
ペン太郎(2 才:2.0kg)
ペン太郎は二本足で歩いた
ペン太郎は魚を食べた。
カメ次郎(8 才:8.0kg)
カメ次郎は四本足で歩いた
カメ次郎は海草を食べた。
ペン太郎は氷上から海に飛び込んだ。
ペン太郎は海から氷上に飛び乗った。
カメ次郎は砂浜から海に入った。
カメ次郎は海から砂浜に上がった。
問題 1 解答
正解は、、、
Creature.java
package lesson011_interface_polymorphism_7;
//生物クラス
public abstract class Creature {
private int age;
private String name;
private double weight;
public Creature(int age, String name, double weight) {
this.age = age;
this.name = name;
this.weight = weight;
}
abstract void eat();
abstract void walk();
public int getAge() {
return age;
}
public String getName() {
return name;
}
public double getWeight() {
return weight;
}
public void showStatus() {
System.out.println(getName() + "(" + getAge() + "才:" + getWeight() + "kg)");
}
}
Bird.java
package lesson011_interface_polymorphism_7;
public abstract class Bird extends Creature {
public Bird(int age, String name, double weight) {
super(age, name, weight);
}
@Override
void walk() {
System.out.println(getName() + "は二本足で歩いた");
}
}
Reptile.java
package lesson011_interface_polymorphism_7;
public abstract class Reptile extends Creature {
public Reptile(int age, String name, double weight) {
super(age, name, weight);
}
@Override
void walk() {
System.out.println(getName() + "は四本足で歩いた");
}
}
Swimmable.java
package lesson011_interface_polymorphism_7;
public interface Swimmable {
void enterWater();
void outWater();
}
Penguin.java
package lesson011_interface_polymorphism_7;
public class Penguin extends Bird implements Swimmable {
public Penguin(int age, String name, double weight) {
super(age, name, weight);
}
@Override
void eat() {
System.out.println(getName() + "は魚を食べた。");
}
@Override
public void enterWater() {
System.out.println(getName() + "は氷上から海に飛び込んだ。");
}
@Override
public void outWater() {
System.out.println(getName() + "は海から氷上に飛び乗った。");
}
}
MarineTurtle.java
package lesson011_interface_polymorphism_7;
public class MarineTurtle extends Reptile implements Swimmable {
public MarineTurtle(int age, String name, double weight) {
super(age, name, weight);
}
@Override
void eat() {
System.out.println(getName() + "は海草を食べた。");
}
@Override
public void enterWater() {
System.out.println(getName() + "は砂浜から海に入った。");
}
@Override
public void outWater() {
System.out.println(getName() + "は海から砂浜に上がった。");
}
}
Main_1101.java
package lesson011_interface_polymorphism_7;
public class Main_1101 {
public static void main(String[] args) {
Penguin penguin = new Penguin(2, "ペン太郎", 2.0);
MarineTurtle marineTurtle = new MarineTurtle(8, "カメ次郎", 8.0);
penguin.showStatus();
penguin.walk();
penguin.enterWater();
penguin.eat();
penguin.outWater();
System.out.println();
marineTurtle.showStatus();
marineTurtle.walk();
marineTurtle.enterWater();
marineTurtle.eat();
marineTurtle.outWater();
System.out.println();
Creature[] creatures = new Creature[] { penguin, marineTurtle };
for (int i = 0; i < creatures.length; i++) {
creatures[i].showStatus();
creatures[i].walk();
creatures[i].eat();
System.out.println();
}
Swimmable[] swimers = new Swimmable[] { penguin, marineTurtle };
for (int i = 0; i < swimers.length; i++) {
swimers[i].enterWater();
swimers[i].outWater();
System.out.println();
}
}
}
Java練習問題 第16回では「日付」から出題します。
コメント