この問題を解くためには… |
→ 応用編第3日目参照 |
---|
問題3:抽象クラス
probex3-1.(難易度:★)
以下のプログラムは、二種類の飛行機、戦闘機(FighterAiracraft)と、旅客機(PassengerPlane)クラスのインスタンスを生成し、各クラスのメソッドを実行するプログラムである。この2つのクラスには、共通するメンバが存在する。
そこで、これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を持つ抽象クラスとすること。
probex3-1:FighterAiracraft.javapackage problemex3; // 戦闘機クラス public class FighterAiracraft{ // 飛行機のタイプ private String type = "戦闘機"; // タイプの取得 public String getType(){ return type; } // 飛行する public void fly(){ System.out.println("攻撃に出るために飛行します。"); } // 戦闘する public void fight(){ System.out.println("戦闘します。"); } }
package problemex3; // 戦闘機クラス public class PassengerPlane{ // 飛行機のタイプ private String type = "旅客機"; // タイプの取得 public String getType(){ return type; } // 飛行する public void fly(){ System.out.println("乗客を乗せて目的地まで飛行します。"); } // 戦闘する public void carryPassengers(){ System.out.println("乗客を目的地まで運びます。"); } }
package problemex3; public class Problemex3_1 { public static void main(String[] args) { // 戦闘機クラスのインスタンスの生成 FighterAiracraft fighter = new FighterAiracraft(); PassengerPlane airlinear = new PassengerPlane(); // 戦闘機クラスの処理 fighter.fly(); // 飛行する fighter.fight(); // 戦闘する // 旅客機クラスの処理 airlinear.fly(); // 飛行する airlinear.carryPassengers(); // 乗客を運ぶ } }
攻撃に出るために飛行します。
戦闘します。
乗客を乗せて目的地まで飛行します。
乗客を目的地まで運びます。
戦闘します。
乗客を乗せて目的地まで飛行します。
乗客を目的地まで運びます。
prob3-2.(難易度:★★)
以下のプログラムは、抽象クラスComputerと、それを実装した、PersonalComputer、TabletPC、およびSmartPhoneクラスを操作するプログラムである。以下に記述されている、Computerクラス、PersonalComputerクラス、Problemex3_2.javaを参考にして、TalbetPCクラス、およびSmartPhoneクラスを完成させ、期待する実行結果と同じものが得られるようにしなさい。
probex3-2:Computer.javapackage problemex3; // コンピュータの抽象クラス public abstract class Computer { // コンピュータのタイプ private String type; // コンストラクタ public Computer(String type){ this.type = type; } // 入力処理 public abstract void input(); // 出力処理 public abstract void output(); // 通信処理 public void communication(){ System.out.println("インターネットで通信"); } // タイプの出力 public void showType(){ System.out.println("コンピュータの種類:" + type); } }
package problemex3; public class PersonalComputer extends Computer{ // コンストラクタ public PersonalComputer(){ super("パーソナルコンピュータ"); } // 入力処理 public void input(){ System.out.println("キーボード・マウスで入力"); } // 出力処理 public void output(){ System.out.println("ディスプレイに出力"); } }
package problemex3; public class Problemex3_2 { public static void main(String[] args) { Computer[] cp = new Computer[3]; cp[0] = new PersonalComputer(); // パーソナルコンピュータ cp[1] = new TabletPC(); // タブレットPC cp[2] = new SmartPhone(); // for(Computer c:cp){ c.showType(); c.input(); c.output(); c.communication(); System.out.println("--------------------------------------"); } } }
コンピュータの種類:パーソナルコンピュータ
キーボード・マウスで入力
ディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:タブレットPC
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------
キーボード・マウスで入力
ディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:タブレットPC
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------