swift中子类重写父类构造方法: 如果父类没有指定构造方法(带参数的构造方法), 子类重写父类构造方法就不需要调用super的构造方法, 反之亦然(如果父类有指定构造方法, 子类重写的构造方法中必须显示调用父类构造方法):
父类没有指定构造函数:
class Animal {
var name: String
var age: Int
init() {
name = "Dog"
age = 10
}
//指定构造方法
// init(name: String, age: Int) {
// self.name = name
// self.age = age
// }
}
class Dog : Animal {
var NO: Int
override init() {
NO = 24
//在没有指定构造函数的情况下,可以不用显示调用父类构造方法, 编译通过, swift会自动隐式调用super.init()
//这样可以保证父类成员初始化完成, 另外swift构造顺序是先初始化完成子类成员, 再去初始化父类成员
// super.init()
}
}
父类有指定构造函数
class Animal {
var name: String
var age: Int
init() {
name = "Dog"
age = 10
}
//指定构造方法
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
class Dog : Animal {
var NO: Int
override init() {
NO = 24
//在有指定构造函数的情况下,必须显示调用父类构造方法, 不然通不过编译
super.init()
}
}
网友评论