天天看點

重載/重寫 - 繼承,多态,封裝 - 屬性/成員變量 - 類别

函數的重載:函數方法的函數名相同,參數的清單不同(清單包括:參數的個數和參數的類型),函數傳回值可相同可不同。函數的重載适用于同一個類中的不同函數,也适用于父類和子類中的函數

函數的重寫:重寫是相對于父類和子類之間的,函數的重寫指的是子類不想繼承使用父類中的函數方法所實作的内容,是以重寫同一個函數方法的實作來對函數進行内部實作的函數覆寫,又稱為函數覆寫;即:函數名相同,參數清單一緻(參數的個數和類型一緻),函數的傳回值一緻。

函數的重寫中提到的繼承使用 - 這個繼承是OC面向對象的三大特性之一。

OC面向對象的三大特性:封裝;繼承;多态

封裝:可以了解為函數方法的外露 - 在類的兩個檔案中(.h 和 .m)的 .h 中進行方法的聲明 .h 的内容相當于public 方法  是外露在外面的供使用者調取使用的,方法可以被外部使用;而方法的實作放在 .m 中, .m 相當于Private 私有的 不能夠被外界看到和使用的 

繼承: 我們所說的子類和父類就是一種繼承關系(子類又稱為“派生類”   父類又稱為“基類”或者“超類”)(平時我們在建立新的控制器時總會選擇UIViewController為父類,我們自己命名的控制器名為子類),子類繼承了父類所有的内容,同時能夠在子類中進行其他的不同于父類中的方法建立等操作,這些操作不會對父類産生影響;而父類中函數方法的變化,子類中會發生相同的變化。(簡單來說就是 - 父類變化影響子類,子類變化不影響父類)

多态:多态的了解就是在繼承的基礎上(即父類和子類這種關系上)一個父類下面可以有多個子類繼承自這個父類   然後對父類中同一個函數方法進行函數的重寫,講函數内部的實作進行改變;然後父類的指針可以指向子類對象,進而能夠調用不同子類内部重寫過的函數方法,以達到實作不同内容的展現效果。(例如:繼承自UIView的兩個子類ViewA和ViewB,相同的初始化方法,但是内部A裡建立了一個按鈕button;而B裡建立了一個Label,然後父類的UIView可以通過,UIView *a =[ [ViewA alloc]init],UIView *b =[ [ViewB alloc]init];  父類指針指向子類的對象,進而能夠通過初始化擷取到不同的展示效果

看過了繼承和重寫之後,可能對繼承和重寫的定義有些許的疑問 - 重寫是對于函數來說的,是對函數方法内部實作的一種重新實作;而繼承是對于類來說的,父類和子類,子類繼承了父類。子類内部繼承了父類的函數方法,子類内部對函數方法實作的修改,是函數的重寫

屬性:聲明一個屬性,系統會預設配置設定讀取函數(set,get方法),可以通過點運算符來調用存取方法,并且會産生一個以_開頭的成員變量

成員變量:聲明一個成員變量,系統不會配置設定讀取函數,不會産生連帶的存取的方法

屬性和成員變量的不同點在于:屬性可以通過存取函數被外部調用,而成員變量不能夠被外部調用,隻有設定為public才可被外部調用

類别:類别分為category和extension,實作了對類的擴充 - category可以在不了解源碼的情況下,對類的方法進行擴充,可以對該類增加新的方法,但是不能增加或改變該類的屬性  ; 而extension是category的一種匿名  就能夠改變類的方法  也能夠改變類的屬性

類别和繼承的異同點:同 - 都實作了對類的擴充  不同 - 類别是相對于該類(該類可以是父類,可以是子類)來說的,改變了該類的方法;而繼承是僅限于對子類來說的,改變了子類的内容,僅對子類起作用,而對于父類來說,沒有變化