c#抽象类继承

本文关键字:继承 抽象类 | 更新日期: 2023-09-27 18:11:28

hej guys,

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

这就是我要解决的任务:

作业2:抽象类不是一个完整的类,它缺少一些部件,并且不能从中创建对象。程序员写派生类必须填充缺失的部分。考虑一个抽象类Vehicle。从这个类派生两个层次结构现在,写4个类,见黄色矩形。从抽象基类Vehicle -> Vehicle with 4 wheels开始->跑车和停在派生类拉力赛,这是最具体的类。类Vehicle包含一个字段保存了车名和一个抽象方法void Display()。

在派生类中实现此函数,使该函数返回有关车辆的信息,例如电机功率和其他必要的属性。最后一个派生类具有私有字段握住电机功率,小车重量,小车加速度,小车最高速度和计算特定功率(功率)的函数/重量)。函数Display返回一个包含所有这些内容的文本字符串信息。在Console应用程序中测试您的工作对象的类型为跑车和拉力赛。

类工具:

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();
}
}
类Vehicle4Wheels:

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.");
    }
}
}
类SportCar:

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

}
}
}

我不确定我是否清楚地理解了任务,并与代码我有到目前为止,我不知道我是否在正确的方式使它发生。我不太懂抽象类和继承。

谢谢你的帮助!

v .

编辑:我的问题是:我怎样才能改变我写的代码来完成我被赋予的任务?因为我不确定在编写代码时如何通用。当我将car属性添加到Vehicle4Wheels类时,如:

private double carWeight;

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

c#抽象类继承

其中一些值(highestSpeed, carWeight等)可以应用于任何 "Vehicle with 4 wheels"(甚至"Vehicle "),因此您可以在级别为这些值定义属性。

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

Display方法可以读取这些属性,所以你甚至不需要在更高的级别重写该方法。

参见http://msdn.microsoft.com/en-us/library/ms173115.aspx,关于构造函数以及如何从派生类的构造函数调用基类的构造函数。

我不确定我是否清楚地理解了任务,并且到目前为止我所拥有的代码,我不知道我是否在正确的方式来实现它

那么,让我们回顾一下到目前为止你们都学了些什么…

当我向Vehicle4Wheels类添加car属性时,如:
private double carWeight;
在以后的派生类中如何处理此属性?

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

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

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

"在控制台应用程序中测试您的工作,该应用程序使用sports 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(); -它不会编译。

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

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