swift 類的封裝、繼承 椰苟、重寫聊疲、多態(tài)


的實質是一種數據類型塘装,類似于int、char等基本類型,不同的是它是一種復雜的數據類型爱致。因為它的本質是類型,而不是數據脾还,所以不存在于內存中缕棵,不能被直接操作,只有被實例化為對象時赠潦,才會變得可操作奶甘。



封裝(Encapsulation) 將程序的實現細節(jié)隱藏的一種方法
目的是保護數據和算法是代碼更加容易理解和維護
實現手段
訪問權限控制
默認 internal
public:可以在任何地方訪問
internal:在模塊 framwork 靜態(tài)庫可以訪問
private:只能定義的文件使用

存儲屬性
類可以直接存儲數據的屬性 成員變量
例如 var name="xiaomao"
可以獲取設置或修改屬性類容的時機
例如:

class Animal{
    var name:String!
    var age:Double!{
        willSet(newValue){print("\(age)將要設置為:\(newValue)")}
        didSet{print("已經設置為:\(age)")}
    }
  init(){
        name="aaa"
        age=10
  }
}

測試:

var ani=Animal()
ani.age=28

輸出:

10.0將要設置為:28.0
已經設置為:28.0

計算屬性
本身不能存儲數據,而是由對象的其他數據計算出來
例如 定義一個圓
確定了半徑就能確定面積
確定了面積也能確定半徑

class Circle {
    var r:Double=0
    var area:Double!{
        set(newArea){
            print("原來面積:",area,"現在面積:",newArea)
            r=sqrt(newArea/3.14)
        }
        get{return r*r*3.14}
    }
}

測試:

var cir=Circle()
cir.r=10
print("半徑:",cir.r,"面積:",cir.area)
cir.area=3.14
print("半徑:",cir.r,"面積:",cir.area)

輸出:

半徑: 10.0 面積: 314.0
原來面積: 314.0 現在面積: 3.14
半徑: 1.0 面積: 3.14

繼承(inherita):
子類繼承父類所有除了私有以外的功能和屬性
子類在父類上可擴張
子類可以重新定義父類的一些功能
swfit 只能單繼承

重寫(覆蓋):
重新定義父類一些方法
需要加關鍵字override

范例:

定義動物類

class Animal{
    var name:String!
    var age:Double=0
    }
    var weigth:Double!
    init(){
        name="animal"
        age=10
        weigth=10
    }
    func eat() {
        print(name,"吃東西了!")
    }
}

狗繼承Animal重寫eat() 新增bite()

class Dog: Animal {
    func bite() {
        print(name,"咬了一口!")
    }
    override func eat() {
        print(name,"吃了一根骨頭")
    }
}

貓繼承Animal重寫eat() 新增claw()

class Cat: Animal {
    func claw()  {
        print(name,"抓了一下")
    }
    override func eat() {
        print(name,"吃了一條魚干")
    }
}

測試用例:

let cat1=Cat()
cat1.name="白玉靈貓"
var dog1=Dog()
dog1.name="單身汪"
var ani=Animal()
ani.name="動物"
dog1.bite()
cat1.claw()

dog1.eat()
cat1.eat()
ani.eat()

//Animal可以轉換為Dog 
//dog1=Animal()
//反過來不行
//報錯Cannot assign value of type 'Animal' to type 'Dog'
ani=Dog()
ani.name="霹靂狗"
ani.eat()

//強轉為Dog 調用bite()
dog1=ani as! Dog
dog1.bite()

//執(zhí)行子類實現 eat()
ani=Cat()
ani.name="黃玉靈貓"
ani.eat()

輸出

單身汪 咬了一口!
白玉靈貓 抓了一下
單身汪 吃了一根骨頭
白玉靈貓 吃了一條魚干
動物 吃東西了!
霹靂狗 吃了一根骨頭
霹靂狗 咬了一口!
黃玉靈貓 吃了一條魚干

多態(tài)(Polymorphism)
給多個不同類型的對象發(fā)送同一消息(即調用同一方法),系統(tǒng)根據對象不同執(zhí)行不同操作
注意!當一個父類的變臉引用他的一個子類對象,并且調用父類被覆蓋(重寫)的方法時,執(zhí)行子類實現!

測試

var ani=Animal()
ani.eat()
ani=Dog()
ani.eat()
ani=Cat()
ani.eat()

輸出

animal 吃東西了!
animal 吃了一根骨頭
animal 吃了一條魚干

鏈接
protocol (協(xié)議)的簡單理解
http://www.reibang.com/p/4988132b2b86
extension(括展)的簡單理解
http://www.reibang.com/p/43acce50c680

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祭椰,隨后出現的幾起案子臭家,更是在濱河造成了極大的恐慌,老刑警劉巖方淤,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉赁,死亡現場離奇詭異,居然都是意外死亡携茂,警方通過查閱死者的電腦和手機你踩,發(fā)現死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讳苦,“玉大人带膜,你說我怎么就攤上這事≡眨” “怎么了膝藕?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咐扭。 經常有香客問我芭挽,道長,這世上最難降的妖魔是什么蝗肪? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任袜爪,我火速辦了婚禮,結果婚禮上薛闪,老公的妹妹穿的比我還像新娘辛馆。我一直安慰自己,他們只是感情好豁延,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布昙篙。 她就那樣靜靜地躺著倔韭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢对。 梳的紋絲不亂的頭發(fā)上寿酌,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音硕蛹,去河邊找鬼醇疼。 笑死,一個胖子當著我的面吹牛法焰,可吹牛的內容都是我干的秧荆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埃仪,長吁一口氣:“原來是場噩夢啊……” “哼乙濒!你這毒婦竟也來了?” 一聲冷哼從身側響起卵蛉,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤颁股,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后傻丝,有當地人在樹林里發(fā)現了一具尸體甘有,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年葡缰,在試婚紗的時候發(fā)現自己被綠了亏掀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泛释,死狀恐怖滤愕,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情怜校,我是刑警寧澤间影,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站韭畸,受9級特大地震影響宇智,放射性物質發(fā)生泄漏。R本人自食惡果不足惜胰丁,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喂分。 院中可真熱鬧锦庸,春花似錦、人聲如沸蒲祈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扬卷,卻和暖如春牙言,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怪得。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工咱枉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徒恋。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓蚕断,卻偏偏與公主長得像,于是被迫代替她去往敵國和親入挣。 傳聞我的和親對象是個殘疾皇子亿乳,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容

  • 20- 枚舉,枚舉原始值,枚舉相關值,switch提取枚舉關聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,278評論 1 6
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法径筏,內部類的語法葛假,繼承相關的語法,異常的語法滋恬,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義桐款,用來描述對象將要有什么(屬性)∫幕校可被本類方法和其他跟當前類有關...
    jeffierw閱讀 548評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理魔眨,服務發(fā)現,斷路器酿雪,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 或許是第一次如此清晰的意識到死亡這種事遏暴,親人就這樣被突發(fā)的急癥帶走,一年有三百六十五天指黎,之后的每一個三百六十五天中...
    顧言徜徉閱讀 276評論 0 0