インターフェースとポリモーフィズム(多態性)
Java練習問題 第15回では「インターフェース」についての問題を用意してあります。
「インタフェース」の解説はこちら
問題 1 難易度 ★★★★
問 1
① 抽象クラス Creature(生物)を、以下のように定義してください。
② Creature クラスには、int 型の age(年齢)、String 型の name(名前)、double 型の weight(体重)を、フィールドとして定義してください。
Creature クラスには、各フィールドに対応するゲッターメソッドを定義してください。
Creature クラスには、age,name,weight を引数とするコンストラクタを定義してください。
Creature クラスには、eat()、walk()の二つの抽象メソッドを定義してください。
Creature クラスには、showStatus()メソッドを定義してください。
showStatus()メソッドでは、「ペン太郎(2 才:2.0kg)」のように、名前、年齢、体重を出力してください。
問 2
① Creature を継承した抽象クラス Bird(鳥類)を、以下のように定義してください。
Bird クラスでは、walk()を「**は二本足で歩いた」を出力するようにオーバーライド実装してください。
② Creature を継承した抽象クラス Reptile(爬虫類)を、以下のように定義してください。 Reptile クラスでは、walk()を「**は四本足で歩いた」を出力するようにオーバーライド実装してください。
問 3
① インターフェイス Swimmable(泳げる)を定義してください。
Swimmable インターフェイスには、水に入る enterWater()、 水から出る outWater()の
二つの抽象メソッドを定義してください。
問 4
① Penguin(ペンギン)クラスを「泳ぐことができる鳥類」として定義してください。
② MarineTurtle(ウミガメ)クラスを「泳ぐことができる爬虫類」として定義してください。
③ 抽象メソッドの実装は、下記実行例を参考にして記述してください。
問 5
① main メソッドの処理で、Penguin と MarineTurtle をインスタンス化してください。
② 下記実行例を参考に、showStatus(),walk(),enterWater(),eat(),outWater()メソッドを呼び出してください。
問 6
① Creature 型の配列を宣言し、Penguin インスタンスと MarineTurtle インスタンスを格納してください。
② 繰返し文を用いて配列内のインスタンスから、showStatus(),walk(),eat() を呼び出してください。
問 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回では「日付」から出題します。
コメント