Swift 中的關鍵字 final和super
阿新 • • 發佈:2019-01-04
final 關鍵字
可以在定義類和類的成時使用 final 關鍵字 它的含義分別如下
- 1、在關鍵字class 前新增 final (修飾符) 可以將整個類標為 final ,這個樣的類不可以被繼承,檢視繼承這樣的類會編譯報錯
final class Person {
}
class Stu : Person { //編譯報錯 error: inheritance from a final class 'Person'
}
- 2.在類的定義中將方法、屬性、下標指令碼標記為 final 可以防止它們被重寫。只需要在宣告關鍵字前加上 final 修飾即可
class Person {
final var name : String?
final func play() {
print("------")
}
final class var age : Int {
return 18
}
final class func run() {
print("******")
}
}
class tech : Person {
override var name : String? //error: expected declaration
override func play() {
//error: instance method overrides a 'final' instance method
}
override class var age : Int {
//error: class var overrides a 'final' class var
return 20
}
override class func run() {
//error: class method overrides a 'final' class method
}
}
super 關鍵字
當子類中重寫父類中的方法,屬性或者下標指令碼,有時在重寫版本中使用已經存在的父類實現會大有益處,比如,可以完善已經實現的行為,或者在一個繼承來的變數中儲存一個修改過的值,訪問父類的成員使用的是 super 字首,
super 的用處
1、訪問父類的屬性,在屬性的getter和setter的重寫中實現,可以通過 super.someProperty 來訪問父類版本的
someProperty2、訪問父類的方法,在方法 someMethod()的重寫實現中 可以通過 super.someMethod()來呼叫父類版本的someMethod()
3、訪問父類的下標指令碼,在下標指令碼的重寫實現中,可以通過 super[someIndex] 來訪問父類版本中的相同下標指令碼
class Animal {
var age = 10
// 使用Static 修飾的靜態屬性不能被子類重寫
static var weight : Double = 20
static func play() {
print("玩")
}
class var height : Double {
return 30
}
func run() {
print("動物在跑")
}
class func eat() {
print("動物在吃")
}
}
class Dog : Animal {
/*
override static var weight : Double {
get{
return 80
}
set{
}
}
*/
//error: cannot override static method
/*
override static func play() {
}
*/
//error: cannot override static method
override var age: Int {
get {
return super.age + 10
}
set {
super.age = newValue - 5
}
}
override class var height : Double {
get {
return super.height + 30
}
set {
}
}
override func run() {
super.run()
print("狗在跑")
}
override class func eat() {
super.eat()
print("狗在吃")
}
}
Dog.eat()
Dog.height
let dog = Dog()
dog.run()
dog.age