Swift學(xué)習(xí)_基本語法之繼承&重寫

Swift

1.繼承

繼承就是子類繼承父類的屬性、方法贷痪、下角標(biāo)

class Person{

    var name:String
    var age:Int
    init(name:String,age:Int) {
    
        self.name = name
        self.age = age
    }

    func printName(){
        print("姓名:\(name) 年齡:\(age)")
    }
}

var onePerson = Person(name:"HarrySun",age:21)
print(onePerson.name,onePerson.age)     // 打印   HarrySun 21

現(xiàn)在以Person為父類繼承一個子類教師

class Teacher:Person{

    var teacherID:Int = 0
    var schollName:String = ""

    func printSchoolName(){
    
        print("老師所在學(xué)校:\(schollName)")
    }
}

注:這里的老師類繼承了屬性name幻妓、age和方法printName,還有構(gòu)造函數(shù)

var oneTeacher = Teacher(name:"劉老師",age:30)
oneTeacher.printName()  // 打印   姓名:劉老師 年齡:30
oneTeacher.schollName = "北京大學(xué)"
oneTeacher.printSchoolName()  // 打印   老師所在學(xué)校:北京大學(xué)

oneTeacher.name = "王老師"
oneTeacher.age = 40
print(oneTeacher.name,oneTeacher.age)   // 打印   王老師 40

我們可以繼續(xù)再繼承劫拢,往下可以定義一個英語老師繼承自老師

class EnglishTeacher:Teacher{

    var englisLevel:String = ""
  
    func printEnglishLevel(){
    
        print(englisLevel)
    }
}

注:英語老師繼承了Teacher繼承于人的所有東西和自己添加的新屬性和方法

var oneEnglishTeacher = EnglishTeacher(name:"John",age:25)
oneEnglishTeacher.name = "LEO"
oneEnglishTeacher.printName()   // 打印   姓名:LEO 年齡:25
oneEnglishTeacher.englisLevel = "8級"
oneEnglishTeacher.schollName = "哈佛大學(xué)"
oneEnglishTeacher.teacherID = 20170209
oneEnglishTeacher.printEnglishLevel()   // 打印   8級
print(oneEnglishTeacher.teacherID)      // 打印   20170209

2.重寫

子類可以為集成來的實例方法肉津、類方法、實例屬性或下標(biāo)腳本提供自己的定制實現(xiàn)舱沧。我們把這種行為叫重寫(overriding)妹沙。

要重寫某個特性,在其前面使用關(guān)鍵字override熟吏;
防止子類重寫距糖,在其前面使用關(guān)鍵字fina;
這里還需要注意的就是, 必須通過get和set這種特性的方式來重寫父類的屬性牵寺。

class Person2{

    var name:String
    var age:Int
    init(name:String,age:Int) {
    
        self.name = name
        self.age = age
    }

    func printInfo(){
    
        print("姓名:\(name)悍引,年齡:\(age)")
    }
}

class Teacher2: Person2 {

    var schoolName:String
    var teacherLevel:Int

    init(name:String,age:Int,schoolName:String) {
    
        self.schoolName = schoolName    // 這個屬性要寫在前面
        self.teacherLevel = 10
        super.init(name: name, age: age)
    }

    // 重寫父類屬性
    override var name: String{
    
            get{
            
                return super.name
            }
            set{
        
                super.name = "HarrySun"
            }
        }

    // 重寫是方法名和參數(shù)還有返回值一致
    // 這個重寫方法是加了一個學(xué)校信息的輸出
    override func printInfo() {
    
        super.printInfo()
        print("學(xué)校名稱:\(self.schoolName)")
    }

    // 用final定義表示防止子類重寫
    final func printTeacherLevel(){
    
        print("老師等級\(self.teacherLevel)")
    }
}

var oneTeacher2 = Teacher2(name:"劉老師",age:30,schoolName:"清華大學(xué)")
oneTeacher2.printInfo()     // 打印姓名:劉老師,年齡:30   學(xué)校名稱:清華大學(xué)


class EnglishTeacher2: Teacher2 {

    var englishLevel:Int = 0

//    override func printTeacherLevel(){
//        
//        print("老師等級\(self.teacherLevel)")
//    }
//    // 這里會報錯帽氓,因為這個printTeacherLevel在父類是禁止重寫的
}

var oneEnglishTeacher2 = EnglishTeacher2(name:"John",age:32,schoolName:"臨沂大學(xué)")
oneEnglishTeacher2.englishLevel = 8
print(oneEnglishTeacher2.englishLevel)  // 打印   8

oneEnglishTeacher2.name = "Sun"
print(oneEnglishTeacher2.name)  // 打印   HarrySun

注:swift要求一個class自己的所有屬性在使用之前必須先初始化趣斤,所以需要把super.init()放在下面,否則將報錯黎休。


此文章代碼結(jié)果輸出

小結(jié)

代碼已上傳至git:
--> 傳送門:Swift_基本語法

附錄

查看完整專欄《Swift學(xué)習(xí)》

有問題歡迎指正以及相互探討 —— CoderSun

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浓领,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子势腮,更是在濱河造成了極大的恐慌联贩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捎拯,死亡現(xiàn)場離奇詭異撑蒜,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門座菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狸眼,“玉大人,你說我怎么就攤上這事浴滴⊥孛龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵升略,是天一觀的道長微王。 經(jīng)常有香客問我,道長品嚣,這世上最難降的妖魔是什么炕倘? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮翰撑,結(jié)果婚禮上罩旋,老公的妹妹穿的比我還像新娘。我一直安慰自己眶诈,他們只是感情好涨醋,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逝撬,像睡著了一般浴骂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宪潮,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天溯警,我揣著相機與錄音,去河邊找鬼狡相。 笑死梯轻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谣光。 我是一名探鬼主播檩淋,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芬为,長吁一口氣:“原來是場噩夢啊……” “哼萄金!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起媚朦,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氧敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后询张,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孙乖,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唯袄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弯屈。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恋拷,靈堂內(nèi)的尸體忽然破棺而出资厉,到底是詐尸還是另有隱情,我是刑警寧澤蔬顾,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布宴偿,位于F島的核電站,受9級特大地震影響诀豁,放射性物質(zhì)發(fā)生泄漏窄刘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一舷胜、第九天 我趴在偏房一處隱蔽的房頂上張望娩践。 院中可真熱鬧,春花似錦逞带、人聲如沸欺矫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穆趴。三九已至,卻和暖如春遇汞,著一層夾襖步出監(jiān)牢的瞬間未妹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工空入, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留络它,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓歪赢,卻偏偏與公主長得像化戳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埋凯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,278評論 1 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,805評論 1 10
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫点楼、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 123.繼承 一個類可以從另外一個類繼承方法,屬性和其他特征白对。當(dāng)一個類繼承另外一個類時, 繼承類叫子類, 被繼承的...
    無灃閱讀 1,392評論 2 4
  • 看過很現(xiàn)實的一本書《皮囊》掠廓,被里面真實的故事所打動。母親的堅持甩恼,父親生病后的希望更是絕望蟀瞧,以及兒子的無奈沉颂。一家人像...
    青梅也煮酒閱讀 216評論 0 0