OC基礎5 繼承

2021-07-03 14:17:33 字數 2276 閱讀 9900

1、根類即是最頂層的類,父類也可稱為超類

2、關於例項變數的繼承:

只有宣告在@inte***ce部分的例項變數才能被子類繼承:包括在類名後馬上使用花括號宣告的變數和使用@property宣告的變數,都可以繼承。如果完全宣告在@implementation部分的變數,則屬於私有變數,需要提供方法才能訪問。

3、每個例項都有自己的一套例項變數,即使這套例項變數是繼承來的。比如bclass是從aclass繼承來的,他們都有乙個變數(int) n,那麼當改變了aclass.a的值的時候,bclass.a的值不會隨著改變。他們是兩個不同的例項。

反觀另一種特別的情況(**8-5):rectangle類是矩形類,xypoint類是點類,rectangle類裡面包含了乙個變數origin是(xypoint *)型別的,用來存放這個矩形的位置點。新建了乙個rectangle類的例項myrect,新建了乙個xypoint類的例項mypoint,然後通過語句

myrect.origin= mypoint;

將mypoint的值賦給myrect作為它的位置點。這時候出現了一種情況,當mypoint的值改變了以後,myrect所包含的origin變數的值也跟著改變了。原因是使用上面的語句的時候,賦給origin變數的值並不是mypoint的內容,而是乙個指標,指向了mypoint的儲存位置,所以當mypoint的內容改變了以後,origin變數的值也跟著改變了,myrect並沒有自己新建一套變數去儲存mypoint的內容,存放的僅僅是乙個指標。

對於這兩種情況要區別去理解:aclass和bclass是兩個不同的例項,各有各的變數;myrect並沒有用乙個變數去儲存mypoint的內容,僅僅只用了乙個(xypoint *)型別的變數來存放了mypoint的指標。

4、對於3中的myrect和mypoint,只要在myrect裡面重新宣告了mypoint用以存放位置的幾個變數,然後把mypoint裡面對應的變數值一一賦給自己的變數,那麼mypoint的值再怎麼改變也不會再影響到myrect包含的位置點變數了。其實即是在myrect的內部宣告乙個mypoint,即有了乙個私有的mypoint。

5、關於@class指令,比如在介面檔案cclass.h中有如下**段:

#import

@class aclass

@inte***cecclass: nsobject

在這段**中出現了指令@class,它的意思是接下來的**中會使用到aclass這個類,這裡告訴編譯器接下來如果遇到「aclass」就把它當做乙個類來對待即可。

但是如果下方**要訪問到aclass包含的變數,那就會報錯,這種情況應該把aclass.h這個介面檔案import進來。

6、關於4,其實不用再去宣告xypoint類的變數,只需要將rectangle類中設定origin的方法改寫如下即可:

-(void)setorigin: (xypoint *) pt {

if (! origin) {   //如果origin是空的,則為false,那麼(! origin)為true,執行以下**;

origin = [[xypoint alloc] init];

origin.x = pt.x;  //x和y都是xypoint的變數,這裡origin是乙個(xypoint *)型的變數,

origin.y = pt.y;  //它也會包含有一套xy,所以不需再去宣告一套;

直接在方法中設定一套xy,就不會受mypoint影響。

這種情況下,雖然origin.x被賦予的仍然是pt.x的指標,但是也完全不需要擔心會受到mypoint的影響的了,因為雖然現在origin.x和pt.x指向的是同一塊記憶體,但是如果改變了pt.x的值的話,其實系統是新分配了一塊記憶體寫了乙個新的值,然後讓pt.x指向這塊新的記憶體,origin.x指向的記憶體不會受到任何影響。

以下圖為例:

(1)、origin = mypoint是這種情況:

(2)、origin.x = pt.x是這種情況:

7、在預設的情況下,合成(synthesize)的設值方法只是簡單地複製物件的指標,而不是物件的本身,其實即是assign。

8、關於方法的覆寫:

覆寫的方法是乙個同名的新方法,必須有相同的返回型別,並且引數的數目也不能改變。

iOS基礎(oc) 繼承

知之部落格 期待與您交流!一 成員訪問型別 private 私有成員,不能被外部函式訪問 使用 也不能被子類繼承 protected 保護成員,不能被外部函式訪問,可以被子類繼承 public 公有成員,可以被外部函式訪問,也可以被子類繼承。oc中,所有的方法 訊息 都是公有的。二 重寫 繼承的另一...

OC基礎語法之封裝繼承多型

封裝 隱藏內部實現,穩定外部介面.封裝就是定義類 定義屬性 定義方法 set方法 提供乙個方法給外界設定成員變數的值,沒有返回值,一定要接收乙個引數,引數型別跟成員變數型別一樣,形參的名稱不能跟成員變數名一樣。get方法 返回物件內部的成員變數,肯定有返回值,返回值與成員變數型別一致,方法名跟成員變...

C 基礎(5) 類繼承

1.從乙個類派生出另乙個類時,原始類稱為基類,繼承類稱為派生類。class tabletennisplayer 乙個簡單的基類 void resettable bool v 將ratedplayer類宣告為從tabletennisplayer類派生而來 class ratedplayer publi...