応用問題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
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------
キーボード・マウスで入力
ディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:タブレットPC
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットで通信
--------------------------------------
コンピュータの種類:スマートフォン
タッチパネルディスプレイをタップして操作
タッチパネルディスプレイに出力
インターネットと電話回線で通信
--------------------------------------