关于C#和继承

Iss*_*mTP 5 c# oop inheritance

关于继承如何在C#中工作,我有一个理论/实际的问题.

让我们说我必须为一些汽车建模,所以我有一些常用的方法,所有的汽车必须实现,飞行员应该知道.在代码字中,这应该是一个接口:

interface Automobile {
   void speedup();
   void break();
   void steer();
   //bla bla
}
Run Code Online (Sandbox Code Playgroud)

现在,除了飞行员可以对他们执行的操作之外,所有类型的汽车应该有一些共同的技术实现,让我们说属性fuelLevel,此时我仍然不想知道汽车如何加速或发生故障,所以我写道:

 abstract class Car : Automobile {
    int fuelLevel;    // for example....
    public abstract void speedup();
    public abstract void break();
    public abstract void steer();
 }
Run Code Online (Sandbox Code Playgroud)

现在我想模拟一辆法拉利,所以:

class Ferrari : Car {
    public void speedup() { ... }
    public void break() { ... }
    public void steer() { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在,在Java中,这段代码应该可以工作(改变一些语法),但在C#中不会因为它说:

Error   1   'Ferrari' does not implement inherited abstract member 'Car.speedup()'
Error   1   'Ferrari' does not implement inherited abstract member 'Car.break()'
Error   1   'Ferrari' does not implement inherited abstract member 'Car.steer()'
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决这个问题?

Ada*_*rth 16

您需要标记方法override以涵盖abstract下面的定义:

class Ferrari : Car 
{
    public override void speedup() { }
    public override void break() { }
    public override void steer() { }
}
Run Code Online (Sandbox Code Playgroud)

除此之外,您已经设置 - Ferrari即使方法是派生的,该类也将满足您的界面.另外,C#中的命名略有不同:

  • 前缀接口I,IAutomobile.
  • 在方法大写字母:Speedup(),Break(),Steer().