我正在学习swift,我尝试在初始化子类时理解super属性的使用
示例代码:
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()
答案 0 :(得分:1)
在您的示例中,super
调用init
的{{1}}方法,即NamedShape
的超类。此方法负责初始化所有Square
所需的属性并执行任何其他设置。
您尚未发布此类的代码,但看起来此方法可能会设置NamedShape
的默认值并存储numberOfSides
的值。
Swift Initialization docs提供了更多详细信息。
答案 1 :(得分:1)
super
基本上意味着"超类"。什么是超类?在这种情况下,NamedShape
是Square
的超类。
在超类中,有一个初始化器:
init(name: String) {
//code not given so I cannot tell you want is in here
//You just need to know that there is an initializer.
}
你的Square
类被称为"子类" NamedShape
。在子类中,您也声明了初始化器。
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
在子类初始化程序中,您调用super.init
。这就是它的含义,
嘿超类!我想调用您的初始值设定项来帮助我初始化此
Square
,我会给您所需的参数 -name
。
所以超类初始化程序完成了他的工作并帮助你初始化Square
。
这被称为"初始化者授权"。