応用練習問題③:抽象クラス

抽象クラスを用いた設計を学びます。

応用問題3:抽象クラス

参考:応用3日目

問題 3-1

以下のプログラムは、二種類の飛行機、戦闘機(FighterAiracraft)と、旅客機(PassengerPlane)クラスのインスタンスを生成し、各クラスのメソッドを実行するプログラムである。この2つのクラスには、共通するメンバが存在する。そこで、これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を持つ抽象クラスとすること。

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("戦闘します。");
    }
}
Java
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("乗客を目的地まで運びます。");
    }
}
Java
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();
    }
}
実行結果
攻撃に出るために飛行します。
戦闘します。
乗客を乗せて目的地まで飛行します。
乗客を目的地まで運びます。
問題 3-2 ★★

以下のプログラムは、抽象クラスComputerと、それを実装した、PersonalComputer、TabletPC、およびSmartPhoneクラスを操作するプログラムである。以下に記述されている、Computerクラス、PersonalComputerクラス、Problemex3_2.javaを参考にして、TabletPCクラス、およびSmartPhoneクラスを完成させ、期待する実行結果と同じものが得られるようにしなさい。

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);
    }
}
Java
package problemex3;

public class PersonalComputer extends Computer{
    public PersonalComputer(){
        super("パーソナルコンピュータ");
    }
    public void input(){
        System.out.println("キーボード・マウスで入力");
    }
    public void output(){
        System.out.println("ディスプレイに出力");
    }
}
Java
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();
        cp[2] = new SmartPhone();
        for(Computer c:cp){
            c.showType();
            c.input();
            c.output();
            c.communication();
            System.out.println("--------------------------------------");
        }
    }
}
期待する実行結果
コンピュータの種類:パーソナルコンピュータ
キーボード・マウスで入力
ディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:タブレットPC
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------