构造函数中的代码是否添加到子类构造函数中的代码中?

Rob*_*cks 5 c# language-agnostic oop

构造函数中的代码是否添加到子类构造函数中的代码中?或者子类的构造函数是否覆盖超类?给定此示例超类构造函数:

class Car{
     function Car(speed:int){ 
          trace("CAR speed "+speed)
     }
}
Run Code Online (Sandbox Code Playgroud)

...和这个子类构造函数:

class FordCar extends Car{
     function FordCar(model:string){ 
          trace("FORD model "+model)
     }
}
Run Code Online (Sandbox Code Playgroud)

FordCar创建一个实例时,这会跟踪"Car"和"Ford"吗?

编辑:参数也会加起来吗?请参阅上面的更新代码

Ree*_*sey 6

是.在大多数语言中,执行基类构造函数,然后执行子类构造函数.这将使其跟踪:"CAR",然后是"FORD".

如果构造子类的实例,则两个类构造函数应始终执行.根据所讨论的语言,基类构造函数的实际执行和选择(包括排序)可能不同.(在允许多重继承的语言中尤其如此 - 因为在某些情况下乍一看很难确定执行顺序.)


编辑:

在大多数语言中,您编辑的代码将无法编译.子类通常需要将相同类型的参数传递给基类构造函数.这是特定于语言的,但通常看起来像:

function FordCar(model: string) : Car(42) {
Run Code Online (Sandbox Code Playgroud)

在某些语言(主要是动态语言)中,语言将尝试自动转换,但您通常可能仍需要指定要调用哪个父构造函数.

通常,您可以这样做:

function FordCar(int: speed, model: string) : Car(speed) {
    trace("FORD model " + model)
}
Run Code Online (Sandbox Code Playgroud)