繼 承
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...