swift繼承

一個(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 繼承我們可以理解為一個(gè)類獲取了另外一個(gè)類的方法和屬性。 當(dāng)一個(gè)類繼承其它類時(shí),繼承類叫子類,被繼承類叫超類(或父類...
    零度_不結(jié)冰閱讀 312評論 0 0
  • ?一個(gè)類可以繼承另外一個(gè)類的方法、屬性和其他特性。當(dāng)一個(gè)類繼承其他類時(shí),繼承類叫子類,被繼承類叫父類。?在swif...
    EndEvent閱讀 941評論 3 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,256評論 4 61
  • 首先,在 Github 上把源碼下載下來,地址是:XMPPFramework源碼地址,進(jìn)入wiki,里面介紹了 x...
    走在路上的小二閱讀 2,831評論 0 6
  • 祈新年,送舊年,稚子嬉嬉盼過年。歡欣勝去年。 迎新年,賀新年,卻笑浮生又一年。舉杯莫計(jì)年。
    圓月閱讀 557評論 3 2

友情鏈接更多精彩內(nèi)容