obj c程式設計04 類的繼承

2021-09-06 20:30:51 字數 2160 閱讀 8585

以下的**中,我們寫了2個類:父類a和子類b,然後b中對a中的方法做了重寫。

#import @inte***ce a:nsobject

@property int i;

-(void)print;

@end

@implementation a

@synthesize i;

-(void)print

@end

@inte***ce b:a

@property int j;

@end

@implementation b

@synthesize j;

-(void)print

@end

int main(int argc,char *argv)

return 0;

}

編譯執行結果例如以下:

2014-06-29 10:34:30.547 1[1035:507] hello obj-c!

2014-06-29 10:34:30.549 1[1035:507] [class a][i:101]:hello!

2014-06-29 10:34:30.549 1[1035:507] [class b:a][i:1001,j:1002]hello!

好,以下我們略微改動一下class a中例項變數i的定義,使它成為私有,即不在@inte***ce中定義而在@implementation中定義i。這時編譯時會發現class b中print會報錯:

1.m:34:41: error: instance variable 'i' is private

nslog(@"[class b:a][i:%d,j:%d]hello!",i,j);

改正也非常easy呢,直接 self.i就可以,以下是改動後的完整**:

#import @inte***ce a:nsobject

@property int i;

-(void)set_i:(int)i;

-(void)print;

@end

@implementation a

@synthesize i;

-(void)set_i:(int)i_v

-(void)print

@end

@inte***ce b:a

@property int j;

@end

@implementation b

@synthesize j;

-(void)print

@end

int main(int argc,char *argv)

return 0;

}

[2014-06-30 第一次新增內容:例項變數的可見性]:

我們上面談到了定義類例項變數的語法,事實上對於例項變數的可見範圍還能夠進一步細化控制,主要有4種可見性,預設是第1種:

1 @protected:例項變數能夠被該類和子類直接訪問(預設);

2 @private:例項變數僅僅能被該類方法訪問;

3 @public:例項變數能夠被該類,子類以及外部方法訪問(須要用->語法,見以下**);

4 @package:在64位映像中,例項變數可在映像的不論什麼位置被訪問。(不太明確哦)

以下上**吧:

#import @inte***ce a:nsobject

@property int i,pri_i;

-(void)set_i:(int)i;

-(void)print;

@end

@implementation a

@synthesize i=i,pri_i=pri_i;

-(void)set_i:(int)i_v

-(void)print

@end

@inte***ce b:a

@property int j;

@end

@implementation b

@synthesize j;

-(void)print

@end

int main(int argc,char *argv)

return 0;

}

ObjC繼承中判斷類歸屬的問題

objc的乙個特點就是動態型別 dynamic types 比如乙個id型別可以宣告為任何物件的型別。這樣就會出現乙個問題,我們常常不知道某個物件到底是屬於哪個類,或者某個物件是哪個類的子類,這時候怎麼辦呢?objc提供了一系列的方法來共我們呼叫判斷 下表就顯示了objc提供的一些方法 然後我們可以...

物件導向程式設計 繼承 類式繼承

定義 讓子類的原型指向父類的例項 1,宣告父類 function superclass superclass.prototype.getsupervalue function 2,宣告子類 function subclass 3,繼承父類 關鍵 subclass.prototype new supe...

Scala 程式設計基礎 類以及類的繼承

scala 類的繼承特點 1.scala 是單繼承 2.scala 子類重寫父類的非抽象方法,屬性必須使用override 關鍵字 3.scala 繼承關鍵字extends 看乙個例子 class point val xc int,val yc int class location override...