Note 8 類的繼承,extension與protocol

繼承

//父類的變量可以引用子類的對象

var ani: Animal //父類的方法eat()
ani = Dog()    //子類里面有拓展的方法bite()
var dog1 : dog

不能用子類的變量引用父類的對象

//dog1 = Animal()
ani.eat()
//ani.bite() 不可用子類對象里的拓展方法
//ani的類型是Animal類型,雖然存的是子類的內(nèi)容
//只能用繼承父類的屬性或者方法
func getInfo(animal: Animal){
    //這樣animal的類型可以是Animal的子類
    //例如Animal的子類有Dog,Cat
    //dog1 = Dog() getInfo(dog1) 
    //cat1 = cat() getInfo(cat1)
    //這也用可以提高代碼的通用性
}

一個操作執(zhí)行時,是根據(jù)實際引用的對象類型決定,而不是根據(jù)變量的類型決定

  • 子類具有父類所有的功能
  • 子類可以重新定義父類的一些功能(方法):方法前面加override
  • Swift只支持單繼承
  • 子類可以在父類的基礎(chǔ)上進行拓展

訪問權(quán)限的控制

  • 權(quán)限:internal/pravite/public
  1. 默認為internal:在當(dāng)前應(yīng)用或模塊可見
  2. pravite: 在當(dāng)前文件中使用
  3. public: 在其他地方都可見

成員的權(quán)限不能超過類的權(quán)限

extension & protocol

  • 繼承(Inheritance):主要目的是重用代碼,父類給子類提供公共代碼
  • 實現(xiàn):提供約束,將不同的類型按行為非分類

成員屬性

  • 存儲屬性:類中可以直接存儲數(shù)據(jù)的屬性
  • 計算屬性:本身不能存儲數(shù)據(jù),而是從對象中的其它數(shù)據(jù)計算而來的

1.extension

  1. 給一類增加功能
  2. 將一個類拆分為多個小的部分,方便代碼管理與維護
  3. 可以給已有的類型增加新的功能,包括方法和計算屬性
  4. 不能新增存儲屬性

2.protocol

  1. 將沒有公共父類,但是有類似行為的對象歸為同類

  2. 在類或擴展中實現(xiàn)協(xié)議中的屬性或者方法

  3. 同一個類可以實現(xiàn)多個協(xié)議,多個協(xié)議用逗號隔開

簡單來說是將一些沒父類關(guān)系的類,劃分在一起,使代碼通用性更強

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

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

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,190評論 1 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,539評論 19 139
  • 一直覺得喜歡畫畫的人心里一定住著小精靈 ,所以今天也分享下自己的繪畫過程。 因為一些原因沒有把每一個步驟都拍下來,...
    糖糖醬閱讀 451評論 0 2
  • 累世情緣,誰撿起,誰拋下,誰忘前塵,誰總牽掛。憶當(dāng)時年華,誰點相思,誰種桃花。 三生三世十里桃花——唐七公子 有一...
    薄荷味的夏天1009閱讀 325評論 0 0

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