C#抽象类继承

C#抽象类继承,c#,inheritance,abstract-class,C#,Inheritance,Abstract Class,嘿,伙计们 我正在努力解决这个家庭作业。我已经走到了死胡同,我正在寻找能够帮助解决这个问题的人 这就是我试图解决的任务: 工作2:抽象类不是一个完整的类,它缺少一些 零件,并且不能从中创建对象。谁是程序员 写入派生类必须填写缺少的部分。考虑 抽象类载体。从该类派生两个层次结构,如下所示 如下图所示:现在,编写4个类,参见黄色矩形。 从抽象基类车辆->四轮车辆开始 ->跑车停在衍生级拉力赛,这是最具体的级别。车辆类别包含一个字段,该字段 保存车辆名称和抽象方法void Display() 在派生类

嘿,伙计们

我正在努力解决这个家庭作业。我已经走到了死胡同,我正在寻找能够帮助解决这个问题的人

这就是我试图解决的任务:

工作2:抽象类不是一个完整的类,它缺少一些 零件,并且不能从中创建对象。谁是程序员 写入派生类必须填写缺少的部分。考虑 抽象类载体。从该类派生两个层次结构,如下所示 如下图所示:现在,编写4个类,参见黄色矩形。 从抽象基类车辆->四轮车辆开始 ->跑车停在衍生级拉力赛,这是最具体的级别。车辆类别包含一个字段,该字段 保存车辆名称和抽象方法void Display()

在派生类中实现此函数,以便 返回有关车辆的信息,例如电机功率和其他信息 必要的属性。最后一个派生类具有要删除的私有字段 保持电机功率,汽车重量,汽车加速度,以及 最高速度和计算特定功率(功率)的功能 /重量)。函数Display返回包含所有这些内容的文本字符串 信息。在使用 跑车类和拉力赛类的对象

车辆类别:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A_work_2
{
public abstract class Vehicle
{
    public string vehicleName;
    public abstract void Display();

}
}
车辆等级4车轮:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A_work_2
{
public class Vehicle4Wheels : Vehicle
{
    public override void Display() 
    {
        Console.WriteLine("Car with four wheels.");
    }
}
}
高级跑车:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A_work_2
{
public class SportCar : Vehicle4Wheels {
    public override void Display()
    {
        Console.WriteLine("Sport version of the car.");
    }
}
}
班级集会:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A_work_2
{
public class Rally : SportCar
{
private double motorPower = 408;
private double carWeight = 2380;
private double carAcceleration = 4.7;
private double highestSpeed = 250;

public double SpecificPower()
{
    double specificPower = motorPower / carWeight;
    return specificPower;
}

public override void Display()
{

   Console.WriteLine("The acceleration is: {0}.\nThe highest speed is {1} km/h.", carAcceleration, highestSpeed);
   Console.WriteLine("Specific power is {0}", SpecificPower());


}
}
}
我不确定我是否清楚地理解了这个任务,根据我目前掌握的代码,我不知道我是否走上了正确的道路来实现它。我不太懂抽象类和本质

谢谢你的帮助

五,

编辑:我的问题是:如何更改我编写的代码以完成分配给我的任务?因为我不确定在编写代码时如何做到通用。当我向Vehicle4Wheels类添加car属性时,如下所示:

private double carWeight;
在以后的派生类中如何处理此属性?

其中一些值(最高速度、汽车重量等)可以应用于任何“四轮车辆”(甚至“车辆”),因此您可以在该级别定义这些值的属性

在(派生类的)构造函数中,可以为这些属性提供值

然后,Display方法可以读取这些属性,因此您甚至不必在更高级别上重写该方法

另请参见,关于构造函数以及如何从派生类的构造函数调用基类的构造函数

我不确定我是否清楚地理解了这个任务,根据我目前掌握的代码,我不知道我是否走上了实现它的正确道路

那么,让我们回顾一下你到目前为止所取得的成果

当我向Vehicle4Wheels类添加car属性时,如:
私人双倍车重
然后如何在以后的派生类中处理该属性

你的家庭作业没有告诉你要担心这个

最后一个派生类有专用字段,用于保存电机功率、汽车重量、汽车加速度、最高速度和计算特定功率(功率/重量)的函数

您已经很好地实现了这一点。您缺少的部分是:

“在使用Sport car和Rally类对象的控制台应用程序中测试您的工作。”

一旦您实现了这一点,您就会理解您编写的所有代码的要点

要使其有趣,并使您了解练习的要点,请确保您的控制台应用程序执行以下操作:

Vehicle sportCar = new SportCar();
sportCar.Display();

Vehicle rally = new Rally();
rally.Display();
请注意,我没有说
Rally Rally=new Rally()

还要注意
Vehicle something=new SportsCar()工作。尝试添加一行:
Vehicle something=new Vehicle()-它不会编译

这将演示继承和(抽象)基类型的一些最重要部分:

  • 您可以与基类型交互并获得派生行为
  • 您不能直接创建抽象类型的实例,但仍然可以在代码中使用这些类型

试试这一切,看看会发生什么。

请把你的问题格式化好。我想你已经回答了需要做的事情。主要的一点似乎是填充Display函数,以使用任何可用的附加属性返回与类相关的数据—您已经完成了这项工作。老实说,作业大纲并不是很清楚你应该做什么——有很大的误解空间,所以即使没有阅读/理解概念,你也已经开始着手做了。最好停止你的工作,读一下关于它的文章。Google up,你会得到很多文章。这是什么,homeworkoverflow?你好像没有问过什么。我一眼就能看出你的代码很好,似乎满足了你的要求,但我可能遗漏了一些东西。请更准确地回答你的问题,否则你会发现它会被关闭,因为它太模糊了,人们无法理解你在问什么。我想说,motorPower只适用于“机动车辆”。。。4轮并不意味着机动车辆-我并不是说你的答案是错误的,更重要的是作业规范有点错误poor@musefan-改为“最高速”:-)@Vojtech:你可以做到这一切,在真正的应用程序中这将是一个好主意。但这不是作业要求做的,所以我不会这样交。嘿,谢谢你的回答。因此,如果我理解正确的话,我在Vehicle类中创建的显示方法将被所有派生类用于在其覆盖的显示类中显示信息,对吗?@Vojtech:几乎,是的。如果您说的是“重写的显示方法”,而不是“重写的显示类”,则该语句是正确的。类是某种东西,方法是某种东西,所以你不能自由地交换术语……是的,对不起,我的错。我知道我指的是方法。