インターフェースとポリモーフィズム(多態性)
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回では「日付」から出題します。












