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

目次

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

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

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

この記事を書いた人

エヌ・キャリア・アカデミーは「21世紀のこれからの激変する社会を生き抜き、第一線で活躍することのできる人材を世に送り出していく」ことを教育理念にかかげ、IT系の職業訓練を実施している職業訓練校です。

この記事は、エヌ・キャリア・アカデミーのスタッフが執筆しています。

企業ホームページ:https://n-career.jp/

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次