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"吗?
编辑:参数也会加起来吗?请参阅上面的更新代码
是.在大多数语言中,执行基类构造函数,然后执行子类构造函数.这将使其跟踪:"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)