如何在不使它们抽象的情况下使用这些类?

问题描述 投票:-3回答:1

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 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;

   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 runningCost;
      runningCost = hours_of_operation * cost_per_cylinder_per_hour * number_of_cylinders;
      return runningCost;
   }
   public int getCylinderNumber()
   {
      return number_of_cylinders;
   }

   public String toString()
   {
      String carInfo = super.toString() + "\nnumber of cylinders: " + number_of_cylinders + "\nMaintenance cost: ";
      return carInfo;
   }
}
--------------------------------------------------------------
public interface Maintainable
{
   float maintenanceCost(float cost_Per_Unit);
}
--------------------------------------------------------------
//errors:
Airplane.java:1: error: Airplane is not abstract and does not override abstract method maintenanceCost(float) in Maintainable
public class Airplane extends Vehicle implements Maintainable

Car.java:1: error: Car is not abstract and does not override abstract method maintenanceCost(float) in Maintainable
public class Car extends Vehicle implements Maintainable

java interface abstract-class
1个回答
0
投票

您从未实际实现Maintainable接口。当您声明一个类实现一个接口时,基本上就是“有希望”实现该接口指定的所有方法。

© www.soinside.com 2019 - 2024. All rights reserved.