繼承
//父類的變量可以引用子類的對象
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
- 默認為internal:在當前應(yīng)用或模塊可見
- pravite: 在當前文件中使用
- public: 在其他地方都可見
成員的權(quán)限不能超過類的權(quán)限
extension & protocol
- 繼承(Inheritance):主要目的是重用代碼,父類給子類提供公共代碼
- 實現(xiàn):提供約束,將不同的類型按行為非分類
成員屬性
- 存儲屬性:類中可以直接存儲數(shù)據(jù)的屬性
- 計算屬性:本身不能存儲數(shù)據(jù),而是從對象中的其它數(shù)據(jù)計算而來的
1.extension
- 給一類增加功能
- 將一個類拆分為多個小的部分,方便代碼管理與維護
- 可以給已有的類型增加新的功能,包括方法和計算屬性
- 不能新增存儲屬性
2.protocol
將沒有公共父類,但是有類似行為的對象歸為同類
在類或擴展中實現(xiàn)協(xié)議中的屬性或者方法
同一個類可以實現(xiàn)多個協(xié)議,多個協(xié)議用逗號隔開