子類在默認(rèn)情況下不繼承父類的構(gòu)造器。
子類繼承父類的構(gòu)造函數(shù)是有條件的浇揩,遵守以下2個規(guī)則:
規(guī)則1——如果子類沒有定義任何指定構(gòu)造函數(shù),它會自動繼承父類所有指定構(gòu)造函數(shù)
規(guī)則2——如果子類提供了所有父類指定構(gòu)造函數(shù)的實現(xiàn)(通過規(guī)則1繼承來的或者提供自定義實現(xiàn)的)憨颠,那么它會自動繼承所有父類便捷初始化器
import Foundation
//提問:此時幾個指定構(gòu)造胳徽,幾個便捷
class Car{
var speed:Double
var banner:String
//指定構(gòu)造函數(shù)(初始化所有屬性)
init(speed:Double,banner:String) {
self.speed = speed
self.banner = banner
}
//指定構(gòu)造函數(shù)
init(speed:Double) {
self.speed = speed
self.banner = "10001A"
}
//便捷構(gòu)造函數(shù),必須調(diào)用指定構(gòu)造函數(shù)
convenience init() {
self.init(speed: 20.0, banner: "20002")
print("父類便利構(gòu)造")
}
}
//【案例一】如果子類沒有定義任何指定構(gòu)造函數(shù),它會自動繼承父類所有指定構(gòu)造函數(shù)
class Bus:Car{
}
var b1 = Bus(speed: 30.0)
var b2 = Bus()
b2.banner
var b3 = Bus(speed: 40.1, banner: "b3000")
//【案例二】如果重寫了父類的所有指定爽彤,繼承便捷
//【提問】如果重寫了父類的部分指定养盗,還能繼承便捷嗎?不能
class Ka:Car{
var weight:Double
//重寫父類指定
override init(speed: Double) {
self.weight = 100.0
super.init(speed: speed, banner: "ka0001")
}
//重寫父類指定
override init(speed: Double, banner: String) {
self.weight = 100.0
super.init(speed: speed, banner: banner)
}
//便捷構(gòu)構(gòu)造器不算重寫适篙,不用加override
convenience init() {
self.init(speed: 20.0, banner: "20002")
print("父類便利構(gòu)造")
}
}
var ka1 = Ka()
ka1.speed