1、关键字说明
designated(中文含义:指定的) :它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个; convenience(中文含义:便利的):我们可以用该关键字来扩展(即新增)构造函数,因此是修饰构造函数的,但需要注意几点: *必需在同一个类中使用; *必需调用一个 designated 构造函数,调用时使用的是 self.init,而不是 super.init; *子类无法重载被 convenience 修饰的构造方法; required(中文含义:必要的):子类必需要实现父类指定的构造函数;
关键字 designated 和 convenience 修饰构造函数的关系:
二、Demo
定义基类People
var name: String?
var age: Int
var sexy: Int
init(_ name: String, age: Int, sexy: Int) {
self.name = name
self.age = age
self.sexy = sexy
}
convenience init(_ name: String, age: Int) {
self.init(name, age: age, sexy: 0)
}
required init(_ name: String) {
self.name = name
self.age = 0
self.sexy = 0
}
}
定义子类 Student
class Student: People {
// 父类的 designated 构造方法,子类可以进行重载
override init(_ name: String, age: Int, sexy: Int) {
super.init(name, age: age, sexy: sexy)
}
// 父类的 convenience 构造方法,子类无法继承
// 父类的 required 构造方法,子类必须实现
required init(_ name: String) {
fatalError("init(_:) has not been implemented")
}
}
网友评论