覆盖函数

时间:2016-08-26 17:48:41

标签: ios swift

我正在一所着名大学提供的在线iOS课程。我不明白为什么以下代码使用override并且它是合法的。

  1. 根据官方定义,我们使用override覆盖超类'方法。以下代码中的子类和超类在哪里?

  2. 什么被覆盖,是什么?

  3. public override var description: String {
        return "\(url.absoluteString) (aspect ratio = \(aspectRatio))"
    }
    

2 个答案:

答案 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()方法。

  

什么被覆盖,是什么?

该属性的实现是被覆盖的。具有实现的类执行覆盖。