3 回答
TA贡献1796条经验 获得超10个赞
Swift不允许您更改任何变量或属性的类类型。相反,您可以在子类中创建一个额外的变量来处理新的类类型:
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覆盖它,反之亦然,这可能是因为超类实现可能不希望该属性一旦初始化就更改。因此,在这种情况下,还需要在超类中使用'var'声明属性,以匹配子类(如上面的代码段所示)。如果无法更改超类中的源代码,则可能最好在每次需要更改底盘时销毁当前的RaceCar并创建一个新的RaceCar。
TA贡献1777条经验 获得超3个赞
这似乎有效
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 关注
- 1432 浏览
添加回答
举报