3 回答
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
Swift不允許您更改任何變量或?qū)傩缘念愵愋?。相反,您可以在子類中?chuàng)建一個(gè)額外的變量來處理新的類類型:
class Chassis {}
class RacingChassis : Chassis {}
class Car {
var chassis = Chassis()
}
class RaceCar: Car {
var racingChassis = RacingChassis()
override var chassis: Chassis {
get {
return racingChassis
}
set {
if newValue is RacingChassis {
racingChassis = newValue as RacingChassis
} else {
println("incorrect chassis type for racecar")
}
}
}
}
似乎無法使用let語法聲明屬性,而不能在其子類中用var覆蓋它,反之亦然,這可能是因?yàn)槌悓?shí)現(xiàn)可能不希望該屬性一旦初始化就更改。因此,在這種情況下,還需要在超類中使用'var'聲明屬性,以匹配子類(如上面的代碼段所示)。如果無法更改超類中的源代碼,則可能最好在每次需要更改底盤時(shí)銷毀當(dāng)前的RaceCar并創(chuàng)建一個(gè)新的RaceCar。
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
這似乎有效
class Chassis {
func description() -> String {
return "Chassis"
}
}
class RacingChassis : Chassis {
override func description() -> String {
return "Racing Chassis"
}
func racingChassisMethod() -> String {
return "Wrooom"
}
}
class Car {
let chassis = Chassis()
}
class RaceCar: Car {
override var chassis: RacingChassis {
get {
return self.chassis
}
set {
self.chassis = newValue
}
}
}
var car = Car()
car.chassis.description()
var raceCar = RaceCar()
raceCar.chassis.description()
raceCar.chassis.racingChassisMethod()
- 3 回答
- 0 關(guān)注
- 1519 瀏覽
添加回答
舉報(bào)
