Objective-C基礎知識之(三):繼承、#import、@class:


一、繼承:

1、用法:

把相同的特征和行為定義在父類中,子類只定義特有的特征和行為。

2、繼承的特點:

(1)父類、子類是相對的概念。如:人->學生->大學生中,學生即是人的子類,也是大學生的父類。

(2)繼承是單向的,OC中只允許單繼承。

(3)繼承具有傳遞性。

(4)子類從父類繼承了所有的實例變量和方法。私有的實例變量和方法只能繼承,不能使用。

(5)沒有父類的類稱為根類,正常情況下,OC中只有一個根類NSObject(祖宗類)

3、繼承的優勢:將多個類中重復的實例變量和方法寫在父類中,子類只定義獨有的實例變量和方法,即保證類的完整,又能簡化代碼。

4、子類繼承注意問題

子類可以繼承父類中所有的實例變量,但是:可見度為私有的實例變量,不能在子類中使用。

子類可以繼承父類中所有的方法,但是,“私有方法”無法調用,因為沒有在接口部分聲明,在類的外部無法識別。

當子類繼承父類時,子類可以不重新聲明繼承的方法,不能重新聲明繼承的實例變量。

當子類調用從父類繼承的方法時,不是在調用父類的方法,子類調用的是自己的方法,本質:子類從父類繼承了相同的方法實現。

子類如果只想繼承方法,不想使用父類提供的實現方法,在子類中重新實現方法,被稱為:重寫。

5、繼承建立的兩種方式

(1)建立文件時設置繼承的層級

(2)文件建立后,如果需要建立繼承關系,則在需要繼承的文件中導入需要繼承父類的頭文件。


6、繼承中方法的執行

繼承具有傳遞性,在子類中執行父類的方法的順序為:查找本類中是否有實現(重寫)的方法;

如果沒有,查找父類中是否有實現(重寫)的方法;

如果沒有,查找父類的父類中是否有實現(重寫)的方法;

逐級向上查找,找到即執行。

如果沒有找到方法,系統則會崩潰。


二、#import、@class:

1、#import

#import作用:導入文件的內容。

在哪兒調用,文件的內容就被導入在哪個位置。

在兩個類的.h文件中,相互導入對方的.h文件時,會造成循環導入現象。

造成循環導入后,編譯器無法編譯到“類的接口部分”這段代碼。導入不成功,無法使用,因為類的接口部分對外聲明了:類名、實例變量、方法。

2、要解決上述的問題,使用@class:類名

語法:@class :類名 ;

作用:告訴編譯器,@class后面的字符串是個類名,作為類名使用。沒有導入頭文件。有效避免循環導入頭文件。

位置:在類的.h文件中,在@interface前。

使用了@class:類名后,就可以在聲明中使用“類名”類型聲明實例變量。

 

在類的實現部分需要導入頭文件:

在類的接口部分使用@class類名,通常只是使用類的名字作為類使用。

在類的實現部分,要使用對象聲明的實例變量和方法,方法是聲明在接口部分(.h文件中),故需要導入類的頭文件。

 



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: