一個(gè)類可以繼承另一個(gè)類的方法,屬性和其它特性。當(dāng)一個(gè)類繼承其它類時(shí),繼承類叫子類,被繼承類叫超類(或父類)。在 Swift 中,繼承是區(qū)分「類」與其它類型的一個(gè)基本特征。
不繼承于其它類的類,稱之為基類。
//animal是一個(gè)基類,定義了一個(gè)name屬性和有參有返回值eating方法
class Animal {
var name : String?
func eating(food:String) -> String {
return name! + "吃" + food
}
}
var dog = Animal()
dog.name = "狗"
print("\(dog.eating(food: "屎嘛?"))")
//繼承animal
class Dog : Animal {
var age = 5
}
var husky = Dog()
//引用子類的屬性和方法
husky.name = "哈士奇"
print("\(husky.eating(food: "枕頭"))")
//重寫,子類可以為繼承來的實(shí)例方法,類方法,實(shí)例屬性,或下標(biāo)提供自己定制的實(shí)現(xiàn)。我們把這種行為叫重寫。
//如果要重寫某個(gè)特性,你需要在重寫定義的前面加上override關(guān)鍵字。這么做,你就表明了你是想提供一個(gè)重寫版本,而非錯誤地提供了一個(gè)相同的定義。意外的重寫行為可能會導(dǎo)致不可預(yù)知的錯誤,任何缺少override關(guān)鍵字的重寫都會在編譯時(shí)被診斷為錯誤。
//override關(guān)鍵字會提醒 Swift 編譯器去檢查該類的超類(或其中一個(gè)父類)是否有匹配重寫版本的聲明。這個(gè)檢查可以確保你的重寫定義是正確的。
class Cat : Animal {
// 重寫eating方法
override func eating(food: String) -> String {
return "別說了,我吃貓糧"
}
}
var cat = Cat()
cat.name = "小貓咪"
print("\(cat.eating(food: "xxx"))")
//防止重寫。你可以通過把方法,屬性或下標(biāo)標(biāo)記為final來防止它們被重寫,只需要在聲明關(guān)鍵字前加上final修飾符即可(例如:final var,final func)
輸出
image.png