オブジェクト指向、ポリモーフィズムの問題。
Q1
自転車クラスと電動自転車クラスをつくり実行例の処理を実現せよ。
電動自転車はバッテリーの最大値が10とし一回走るとバッテリーを5消耗することとする。
■一般クラス:Bicycle
<フィールド変数>
wheelSize
<コンストラクタ>
任意
<メソッド>
public void ride()
他任意
■一般クラス:ElectricBicycle(スーパークラス:Bicycle)
<フィールド変数>
static final int MAX=10
int battery
<コンストラクタ>
任意
<メソッド>
public void ride()
public void batteryCharge(){10にする}
他任意
■アプリケーションクラス:
自転車をホイールサイズ27で電動自転車をホイールサイズ24,バッテリーを10でインスタンスを作成し、実行例の処理を実現せよ。
[実行例]
自転車を選んでください 0・・・自転車/ホイールサイズ:27 1・・・電動自転車/ホイールサイズ:24 バッテリー:10 2・・・終了 番号を入力してください>0 1/走る,2/降りる>1 風をきって走ります。 1/走る,2/降りる>2 自転車を降りました。 自転車を選んでください 0・・・自転車/ホイールサイズ:27 1・・・電動自転車/ホイールサイズ:24 バッテリー:10 2・・・終了 番号を入力してください>1 1/走る,2/降りる,3/充電>1 風をきって走ります。 坂道だってラクラクです。 1/走る,2/降りる,3/充電>1 風をきって走ります。 バッテリーが切れるととても重いです。 1/走る,2/降りる,3/充電>3 バッテリーを充電しました。 1/走る,2/降りる,3/充電>1 風をきって走ります。 坂道だってラクラクです。 1/走る,2/降りる,3/充電>2 自転車を降りました。 自転車を選んでください 0・・・自転車/ホイールサイズ:27 1・・・電動自転車/ホイールサイズ:24 バッテリー:5 2・・・終了 番号を入力してください>2 アプリケーションを終了します。
一般クラス
public class Bicycle {
private int wheelSize;
public Bicycle(int wheelSize){
this.wheelSize=wheelSize;
}
public void ride(){
System.out.println("風をきって走ります。");
}
@Override
public String toString() {
return "自転車/ホイールサイズ:"+this.wheelSize;
}
}
class ElectricBicycle extends Bicycle{
private static final int MAX=10;
private int battery;
public ElectricBicycle(int wheelSize,int battery) {
super(wheelSize);
this.battery=battery > MAX? MAX:battery;
}
@Override
public void ride() {
super.ride();
battery-=5;
if(battery > 0){
System.out.println("坂道だってラクラクです。");
}else{
System.out.println("バッテリーが切れるととても重いです。");
}
}
public void batteryCharge(){
this.battery=MAX;
System.out.println("バッテリーを充電しました。");
}
@Override
public String toString() {
return "電動"+super.toString()+" バッテリー:"+this.battery;
}
}
アプリケーションクラス
import java.util.Scanner;
public class BicycleApp {
public static void main(String[] args) {
Bicycle[] bicycles={new Bicycle(27),new ElectricBicycle(24,10)};
Scanner s=new Scanner(System.in);
while(true){
System.out.println("自転車を選んでください");
for(int i=0;i<=bicycles.length;i++){
System.out.println(i+"・・・"+(i==bicycles.length? "終了":bicycles[i]));
}
System.out.print("番号を入力してください>");
int select=s.nextInt();
if(select==bicycles.length){System.out.println("アプリケーションを終了します。");return;}
Bicycle myBicycle=bicycles[select];
do{
System.out.print("1/走る,2/降りる"+(myBicycle instanceof ElectricBicycle? ",3/充電":"")+">");
select=s.nextInt();
switch(select){
case 1:
myBicycle.ride();
break;
case 2:
System.out.println("自転車を降りました。");
break;
case 3:
if(myBicycle instanceof ElectricBicycle){
((ElectricBicycle)myBicycle).batteryCharge();
}
break;
}
}while(select != 2);
}
}
}
コメント