我正在一所着名大学提供的在线iOS课程。我不明白为什么以下代码使用override
并且它是合法的。
根据官方定义,我们使用override
覆盖超类'方法。以下代码中的子类和超类在哪里?
什么被覆盖,是什么?
public override var description: String { return "\(url.absoluteString) (aspect ratio = \(aspectRatio))" }
答案 0 :(得分:14)
以下是一个例子:
你原来的课程:
class Person {
func walk() {
//do something
}
}
您的子类:
class Runner: Person {
override func walk() {
//do something that is different from Person's walk
}
}
在Runner
课程中,override
的函数为walk
。那是因为它是Person
的子类,它可以覆盖Person的walk函数。所以如果你实例化一个Runner
:
var usainBolt = Runner()
你调用walk
函数:
usainBolt.walk()
然后,它将调用您在Runner
类中编写的overriden函数。如果您不覆盖它,它将调用您在walk
中编写的Person
函数。
答案 1 :(得分:2)
根据官方定义,我们使用覆盖来覆盖超类的方法。
这是对的。示例中的超类是包含description
属性覆盖的类。这可能是NSObject
,其他一些派生自(直接或间接)的类,或者某些与NSObject
无关且具有var description: String
属性的类。
description
是Swift类通常具有的一种属性,可以将自己表示为字符串,因为description
提供了与CustomStringConvertible
协议的一致性。这类似于Java的toString()
方法和Python的str()
方法。
什么被覆盖,是什么?
该属性的实现是被覆盖的。具有实现的类执行覆盖。