import UIKit
class Person {
// 給方法添加class關(guān)鍵字
class func work() {
print("Type Method: Person: 警察.")
}
// 使用static關(guān)鍵字創(chuàng)建類方法
static func nameOfPerson(name: String) {
print("Type Method: Person name: \(name)")
}
// 可以和類方法重名, 以及一樣的參數(shù).
func nameOfPerson(name: String) {
print("Instance Method: person name \(name)")
}
}
class Teacher: Person {
// 重寫父類的類型方法.
override class func work() {
print("Type Method: Teacher: University Teacher")
}
/**
* 下面的寫法是錯誤的, 報錯信息: Class method overrides a 'final' class method(重寫了一個final的類方法.)
* final 關(guān)鍵字:
可以通過把方法叉橱,屬性或下標(biāo)標(biāo)記為final來防止它們被重寫止毕,只需要在聲明關(guān)鍵字前加上final修飾符即可(例如:final var,final func,final class func,以及final subscript)。如果你重寫了final方法,屬性或下標(biāo)茎活,在編譯時會報錯。
*/
// override static func nameOfPerson(name: String) {
//
// }
}
class Student: Person {
// 子類Student的實(shí)例方法work(), 和父類的類方法work()沒有關(guān)系, 二者不在同一個級別上, 不存在同名問題.
func work() {
print("Instance Method: Student: University Student")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let per = Person()
// 父類的類方法
Person.work() /**< Type Method: Person: 警察. */
Person.nameOfPerson("Tom") /**< Type Method: Person name: Tom */
// 父類的實(shí)例方法
per.nameOfPerson("Edward") /**< Instance Method: person name Edward. */
// 子類的類方法
// 直接調(diào)用父類的類方法
Teacher.nameOfPerson("Susan") /**< Type Method: Person name: Susan */
// 調(diào)用的是子類中重寫父類的類方法work()
Teacher.work() /**< Type Method: Teacher: University Teacher */
let stu = Student()
// 子類Student的實(shí)例方法work()
stu.work() /**< Instance Method: Student: University Student */
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
關(guān)鍵字static和class的區(qū)別
在方法的func關(guān)鍵字之前加上關(guān)鍵字static或者class都可以用于指定類方法.
不同的是用class關(guān)鍵字指定的類方法可以被子類重寫, 如下:
override class func work() {
print("Teacher: University Teacher")
}
但是用static關(guān)鍵字指定的類方法是不能被子類重寫的, 根據(jù)報錯信息: Class method overrides a 'final' class method.
我們可以知道被static指定的類方法包含final關(guān)鍵字的特性--防止被重寫.