【发布时间】:2017-03-31 10:22:33
【问题描述】:
创建了一个超类Car和一个子类Jaguar。子类中的函数 info() -> Void 覆盖了超类的函数。 Jaguar 类型的名为 theAuto 的实例已创建。
问题:
似乎我无法将 theAuto 转换为 Car 的类型,请参阅代码 sn-p 及其 cmets
class Car {
func info() {
print("You've got a car")
}
}
class Jaguar : Car {
override func info() {
print("You've got a Jaguar")
}
}
let theAuto = Jaguar()
theAuto.info() // --> You've got a Jaguar
let auto = theAuto as Car // casting but seems not working
auto.info() // --> You've got a Jaguar
print(type(of: auto)) // fail to casting
问题:
我想我没有完全理解强制转换和覆盖场景的概念。为什么我不能补铸?覆盖操作是否限制了我的上限转换?
非常感谢您的帮助和时间
【问题讨论】:
-
如果要调用 Car 类的 info 方法,必须创建 Car 实例。如果您不覆盖 info 方法,它只会在这种情况下调用。如果你覆盖它的超类中的任何方法,那么它总是调用子类方法。
-
@Sahil 我将行从“let Car = Jaguar()”更改为“let auto:Car = Jaguar()”,但它不起作用
-
你可以通过基类的超类的实例来创建基类的对象,这样对象就可以指向它自己的每一个成员和它的超类。