在Swift中进行子分类时理解init()
从已具有初始值设定项的类继承时,如何添加自定义初始值设定项 我有一个在Swift中进行子分类时理解init(),swift,inheritance,subclass,init,Swift,Inheritance,Subclass,Init,从已具有初始值设定项的类继承时,如何添加自定义初始值设定项 我有一个Vehicle类,它有一个初始化器,它接受一个参数name。我要做的是从这个车辆类继承,为新类创建另一个初始值设定项,但继续使用现有的初始值设定项 class Car: Vehicle { var engine: Double init(make: String, engine:Double){ self.engine = engine super.init(make: make
Vehicle
类,它有一个初始化器,它接受一个参数name
。我要做的是从这个车辆
类继承,为新类创建另一个初始值设定项,但继续使用现有的初始值设定项
class Car: Vehicle {
var engine: Double
init(make: String, engine:Double){
self.engine = engine
super.init(make: make)
}
}
基类(这里没有问题):
新类(不工作):
这就是我希望能够做到的。。。重新使用现有的初始值设定项和新的初始值设定项。
let cobalt = Car(make:"Chevy" engine: 2.5)
子类中的任何指定初始值设定项都必须从其直接超类调用指定的初始值设定项: 类类型的初始值设定项委托 简化指定和便利之间的关系 草签人,Swift适用以下三条授权规则 初始化者之间的调用: 规则1指定的初始值设定项必须调用指定的初始值设定项 从其直接超类 从 因此,您可以构造
Car
的指定初始值设定项来接受两个参数,make
和engine
,并使用后者初始化子类的成员属性engine
,然后使用提供的make
参数调用超类的指定初始值设定项(提供给子类初始值设定项)作为超类初始值设定项的参数
class Car: Vehicle {
var engine: Double
init(make: String, engine:Double){
self.engine = engine
super.init(make: make)
}
}
子类中的任何指定初始值设定项都必须从其直接超类调用指定的初始值设定项: 类类型的初始值设定项委托 简化指定和便利之间的关系 草签人,Swift适用以下三条授权规则 初始化者之间的调用: 规则1指定的初始值设定项必须调用指定的初始值设定项 从其直接超类 从 因此,您可以构造
Car
的指定初始值设定项来接受两个参数,make
和engine
,并使用后者初始化子类的成员属性engine
,然后使用提供的make
参数调用超类的指定初始值设定项(提供给子类初始值设定项)作为超类初始值设定项的参数
class Car: Vehicle {
var engine: Double
init(make: String, engine:Double){
self.engine = engine
super.init(make: make)
}
}
非常感谢。为什么在这种情况下忽略了
覆盖
修饰符?车辆
没有与init匹配的声明(make:String,engine:Double)
,因此您没有重写任何内容。您只在子类的声明与父类的声明匹配时使用重写
,通知编译器您知道您实际上正在重写现有声明。非常感谢。为什么在这种情况下省略重写
修饰符?车辆
doesn没有与init(make:String,engine:Double)
匹配的声明,因此您没有重写任何内容。只有在子类的声明与父类的声明匹配时,才使用override
,通知编译器您知道您实际上正在重写现有的声明。