練習問題3.6

Vehicle.java(抜粋)

public class Vehicle {
	private long VehicleID;					//車単位のID
	private static long NextVehicleID=0;	//次の乗り物の識別番号
	private EnergySource es;

	//コンストラクタ
	Vehicle(){
		VehicleID = NextVehicleID;
		NextVehicleID++;
	}
		
	Vehicle(EnergySource es){
		this();
		this.es = es;
	}
	
	public void start(){
		if(es.empty())
			System.out.println("燃料が空です。");
		else
			System.out.println("発車できます。");
	}
	
	public static void main(String args[]){
		Vehicle gasVehicle = new Vehicle(new GasTank(10.0));
		Vehicle noGasVehicle = new Vehicle(new GasTank(0.0));
		Vehicle batteryVehicle = new Vehicle(new Battery(100.0));
		Vehicle noBatteryVehicle = new Vehicle(new Battery(0.0));
		
		gasVehicle.start();
		noGasVehicle.start();
		batteryVehicle.start();
		noBatteryVehicle.start();
	}
}

EnergySource.java

public abstract class EnergySource {
	abstract boolean empty();
}

GasTank.java

public class GasTank extends EnergySource{
	private double fuel;
	public GasTank(double fuel){ this.fuel = fuel; }
	public boolean empty(){
		if(fuel > 0)
			return false;
		else
			return true;
	}
}

Battery.java

public class Battery extends EnergySource {
	private double battery;
	Battery(double battery) { this.battery = battery; }
	public boolean empty(){
		if(battery > 0)
			return false;
		else
			return true;
	}
}

実行結果

発車できます。
燃料が空です。
発車できます。
燃料が空です。