我必须创建一个虚假的DMV程序来计算商用和私人车辆的年费。这两个类将是抽象的,它们将来自名为所有车辆的类的多态性。
我的教练只希望一个对象创建整个程序(在main中),但由于我的前三层类是抽象的。我不能用它们创建一个物体,即vehicle = new vehicles();
所以我的问题是我如何只创建一个对象,因为它们是抽象的?如果您有任何问题可以随意提问,我可能没有解释清楚......
答案 0 :(得分:0)
你也可能无法通过“只有一个对象”理解你的教师的意思,因为这没有意义。
答案 1 :(得分:0)
也许你要制作一个代表DMV的对象,但该对象的定义包括其他对象的实例。
class DMV {
private List<Vehicle> vehicles = new List<Vehicle>();
...
}
答案 2 :(得分:0)
您的教师可能希望您通过对抽象基类的引用来实例化多个对象:
Vehicle conveyance;
conveyance = new PrivateVehcicle();
conveyance.Drive();
conveyance.Stop();
// or whatever ...
conveyance = new CommercialVehcicle();
conveyance.Drive();
conveyance.Stop();
即。你有一个单一的对象引用(传递),它根据你实例化的具体类型而多态化。
答案 3 :(得分:0)
您的课程结构如下所示:
abstract class Vehicle
{
protected abstract int BaseFee { get; }
protected abstract int ExtraFee { get; }
public int CalculateFee()
{
return BaseFee + ExtraFee;
}
}
abstract class CommercialVehicle : Vehicle
{
protected override int BaseFee
{
return 100;
}
}
class LightDutyTruck : CommercialVehicle
{
protected override int ExtraFee
{
return 50;
}
}
class Semi : CommercialVehicle
{
protected override int ExtraFee
{
return 150;
}
}
[etc...]
abstract class PrivateVehicle : Vehicle
{
protected override int BaseFee
{
return 25;
}
}
class Sedan : PrivateVehicle
{
protected override int ExtraFee
{
return 15;
}
}
等等,每个班级。在Main
方法中,您将根据输入创建实例,但实际变量将声明为类型Vehicle
。实际计算将根据您创建的实例生效:
Vehicle v;
switch(input)
{
case "semi":
v = new Semi();
break;
case "truck":
v = new LightDutyTruck();
break;
...
}
int fee = v.CalculateFee();