| この問題を解くためには… |
| → 応用編第3日目参照 |
|---|
問題3:抽象クラス
probex3-1.(難易度:★)
以下のプログラムは、二種類の飛行機、戦闘機(FighterAiracraft)と、旅客機(PassengerPlane)クラスのインスタンスを生成し、各クラスのメソッドを実行するプログラムである。この2つのクラスには、共通するメンバが存在する。
そこで、これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を持つ抽象クラスとすること。
probex3-1:FighterAiracraft.java
package 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.java
package 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
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------









