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