A:使Vehicle为抽象类,并向其添加以下抽象方法:
浮动运行成本(int hours_of_operation);它接收运行小时数作为参数,并返回车辆的运行成本。 Car和Airplane类将按以下方式实现此方法:
对于Car类,定义一个名为cost_per_cylinder_per_hour的私有浮点型实例变量,并将其初始化为您选择的值。汽车的runningCost等于:运营小时x成本每缸每小时x缸数
对于Airplane类,定义一个名为cost_per_engines_per_hour的私有float实例变量,并将其初始化为您选择的值。一架飞机的运行成本等于:运营小时x成本引擎每引擎小时x引擎数量
B:编写一个称为maintainable的接口,该接口具有以下方法:
float maintenanceCost(float cost_Per_Unit);它接收发动机或气缸的单位成本作为参数,并返回维护成本。 Car和Airplane类将实现此接口,如下所示:
对于汽车类,汽车的维护成本将等于:cost_Per_Unit x缸数
对于飞机类,飞机的维护成本将等于:cost_Per_Unit x发动机数量
C:向Vehicle类添加String toString()方法。打印车辆时,将显示其名称和max_speed。另外,向Car和Airplane类中添加String toString()方法。 Car和Airplane类的String toString()方法将显示以下内容:
打印汽车时,将显示其名称,max_speed,缸数和cost_per_cylinder_per_hour。
打印飞机时,将显示其名称,max_speed,发动机数量和cost_per_engines_per_hour。
编辑:实现接口似乎可以解决与抽象错误有关的问题。但是现在我很难显示正确的值。
代码:
public abstract class Vehicle
{
private String name;
private double max_speed;
public Vehicle(String n, double top_speed)
{
name = n;
max_speed = top_speed;
}
public void setName(String n)
{
name = n;
}
public void setMaxSpeed(double top_speed)
{
max_speed = top_speed;
}
public String getName()
{
return name;
}
public double getMaxSpeed()
{
return max_speed;
}
public String toString()
{
String info = "Vehicle name: " + name + "\ntop speed: " + max_speed;
return info;
}
public abstract float runningCost(int hours_of_operation);
}
-------------------------------------------------------------
public class Airplane extends Vehicle implements Maintainable
{
private int number_of_engines;
private float cost_per_engines_per_hour;
public Airplane(String n, double top_speed, int engines)
{
super(n, top_speed);
number_of_engines = engines;
}
public void setEngineNumber(int engines)
{
number_of_engines = engines;
}
@Override
public float runningCost(int hours_of_operation)
{
float runningCost;
cost_per_engines_per_hour = 39.0f;
runningCost = hours_of_operation * cost_per_engines_per_hour * number_of_engines;
return runningCost;
}
public float maintenanceCost(float cost_PEr_Unit)
{
float maintenanceCost = cost_Per_Unit * number_of_engines;
}
public int getEngineNumber()
{
return number_of_engines;
}
public String toString()
{
String planeInfo = super.toString() + ", number of engines: " + number_of_engines;
return planeInfo;
}
}
---------------------------------------------------------
public class Car extends Vehicle implements Maintainable
{
private int number_of_cylinders;
private float cost_per_cylinder_per_hour;
private float maintenance_cost;
private float running_cost;
public Car(String n, double top_speed, int cylinders)
{
super(n, top_speed);
number_of_cylinders = cylinders;
}
public void setCylinderNumber(int cylinders)
{
number_of_cylinders = cylinders;
}
@Override
public float runningCost(int hours_of_operation)
{
cost_per_cylinder_per_hour = 13.0f;
float running_cost;
running_cost = hours_of_operation * cost_per_cylinder_per_hour * number_of_cylinders;
return running_cost;
}
public float maintenanceCost(float cost_Per_Unit)
{
float maintenance_cost = cost_Per_Unit * number_of_cylinders;
return maintenance_cost;
}
public int getCylinderNumber()
{
return number_of_cylinders;
}
public String toString()
{
String carInfo = super.toString() + "\nnumber of cylinders: " + number_of_cylinders + "\nMaintenance cost: " + maintenance_cost + "\nRunning cost(Per hour):" + running_cost;
return carInfo;
}
}
--------------------------------------------------------------
public interface Maintainable
{
float maintenanceCost(float cost_Per_Unit);
}
--------------------------------------------------------------
output:
Vehicle name: Lamborghini Diablo SV
top speed: 204.0
number of cylinders: 12
Maintenance cost: 0.0
Running Cost(Per hour):0.0
Vehicle name: Boeing 767
top speed: 754.6, number of engines: 2
您从未在任何一个类中实际实现Maintainable
接口。当您声明一个类实现一个接口时,基本上就是“有希望”实现该接口指定的所有方法。
因此您需要在每个类中创建一个maintenanceCost
方法,该方法接受一个float作为参数并返回一个float。
该方法应实际包含的详细信息在需求文档中。