ObjC第四節 繼承

2021-07-04 15:57:39 字數 3692 閱讀 7547

繼      承

1、繼承

1.1 nsobject,根類,oc建立的類都繼承自根類,位於類層次結構的頂層,沒有父類

1.2 父類的例項變數和方法都可以被隱式的繼承過來成為子類的一部分,子類就可以直接訪問這些例項變數和方法

1.3 alloc和init是繼承自nsobject的方法

1.4 繼承的概念呈單鏈繼承即單一繼承

1.5 編譯器首先去物件所屬類中找尋有沒有定義與訊息同名的方法,如果有則執行,如果沒有則去本類的父類尋找,如果有則執行,如果沒有則繼續往上尋找,如果一直沒有找到,就會發出警告

1.6 繼承中,不能刪除或減去繼承來的方法,但是可以更改方法的實現,即重寫方法,必須與父類的方法原型相同,即有相同的返回值型別和引數,此時,呼叫正確版本的方法基於訊息的接收者來確定

1.7 父類不可以訪問子類擴充套件的方法

2、id

2.1 typedef  struct objc_object * id;

2.2 id是乙個通用的物件型別,可以儲存任意型別物件

2.3 isa用來儲存物件所屬的類,基於動態繫結實現,方法的選擇是在程式執行期間根據isa中儲存的receiver所屬的類來確定的

2.4 如果是id型別,編譯器不會給出警告,因為執行之前不知道id儲存的是什麼型別的物件,只有程式執行時才能確定

1、組合、繼承

xypoint.h

#import @inte***ce xypoint : nsobject

@property int x, y;

- (void) print;

@end

xypoint.m

#import "xypoint.h"

@implementation xypoint

@synthesize x, y;

- (void) print

@end

shape.h

#import #import "xypoint.h"

@inte***ce shape : nsobject

//@property (nonatomic, retain) nsstring * color;

//@property (nonatomic) int x, y;

@property (nonatomic, retain) xypoint * point;

- (id) initwithcolor:(nsstring *)_color andpoint:(xypoint *)_point;

- (void) draw;

+ (void)num;

@end

shape.m

#import "shape.h"

@implementation shape

//@synthesize color, x, y;

@synthesize color, point;

- (id) initwithcolor:(nsstring *)_color andpoint:(xypoint *)_point

return self;

}- (void) draw

+ (void)num

@end

circle.h

#import #import "shape.h"

@inte***ce circle : shape

@property (nonatomic) int radius;

- (id) initwithcolor:(nsstring *)_color andpoint:(xypoint *)_point andradius:(int)_radius;

- (float) area;

+ (void)num;

@end

circle.m

#import "circle.h"

@implementation circle

@synthesize radius;

- (id) initwithcolor:(nsstring *)_color andpoint:(xypoint *)_point andradius:(int)_radius

return self;

}- (float) area

- (void) draw

+ (void)num //類方法可以繼承,可以重寫,可以super呼叫

@end

main.m

#import #import "circle.h"

int main()

2、接第三節練習,子類中初始化父類

salooncar.h

#import #import "car.h"

@inte***ce salooncar : car

@property (nonatomic) int windows;

- (id) initwithseats:(int)_seats andheight:(double)_height andwidth:(float)_width andtair:(tair *)_tair andwindows:(int)_windows;

- (void) print;

@end

salooncar.m

#import "salooncar.h"

@implementation salooncar

@synthesize windows;

- (id) initwithseats:(int)_seats andheight:(double)_height andwidth:(float)_width andtair:(tair *)_tair andwindows:(int)_windows

return self;

}- (void) print

- (void)dealloc

@end

mian.m

#import #import "salooncar.h"

int main(int argc, const char * argv)

return 0;

}

3、id

#import @inte***ce classa : nsobject

- (void) initvar;

- (void) printvar;

@end

@implementation classa

- (void) initvar

- (void) printvar

@end

@inte***ce classb : nsobject

- (void) initvar;

- (void) printvar;

@end

@implementation classb

- (void) initvar

- (void) printvar

@end

int main(int argc, const char * argv)

return 0;

}

第四節 條件語句

if語句 if v 100else if v 50elseif語句不需要括號 用法高階 const filename abc.txt if contents,error ioutil.readfile filename error nilelse注意 contents和error變數都是在if 塊中...

Python基礎第四節

字典是 鍵值對 的無序可變序列,其中每個元素都是乙個 鍵值對 包含 鍵物件 和 值物件 就像可通過列表元素索引值獲取對應物件,我們可通過 鍵物件 獲取 刪除 更新其對應的值物件。鍵必須是不可變資料,如整數 浮點數 字串 元組,不能是字典 列表 集合等可變物件,鍵不可重複。若重複出現鍵,則後面的覆蓋前...

第四節 C 函式過載

在真實的軟體開發中,經常要使用到函式過載,尤其在類的設計中,經常遇到。c 的函式過載是指,多個函式可以使用同乙個函式名,但是條件是函式的引數列表必須不同,引數列表內,可以是引數的數目不同,引數的型別不同等,如下所示 include void setvalue int one void setvalu...