[ Java練習問題 ] 練習問題 第15回 『インターフェースとポリモーフィズム』

目次

インターフェースとポリモーフィズム(多態性)

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回では「日付」から出題します。

(Visited 269 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次