1.繼承的語法:
(1)這時是沒使用繼承時的結構圖:
(2)為了減少**的重複性,我們建立乙個shape類,然後circle和rectangule都繼承它:
[plain]view plain
copy
@inte***ce shape : nsobject
-(void) setfillcolor : (shapecolor)fillcolor;
-(void) setbounds : (shaperect) bounds;
-(void) draw;
@end//這裡建立了乙個shape類,值得一提的是:第一行的冒號後面的代表shape 繼承nsobject類
(3)接著實現這個新類:
[plain]view plain
copy
@implementation shape
-(void) setfillcolor : (shapecolor ) c
-(void) setbounds : (shaperect) b
-(void) draw
@end//這裡實現了shape介面
從上面可以看出draw方法沒有實現任何功能,這是因為它的具體功能由它的子類來複寫完成。
(4)使circle和rectang繼承shape:
[plain]view plain
copy
@inte***ce circle : shape
@end //繼承shape
@inte***ce rectangle : shape
@end//繼承shape
(5)複寫各自的draw方法完成各自具體功能:
[plain]view plain
copy
@implementation circle
-(void) draw
@end//複寫draw方法,rectangule的實現也是類似。
(6)相關術語:
超類:是你所繼承的類
父類:超類的另一種叫法
子類:是實施繼承的類。
2.繼承後的方法排程機制:
(1)我們可以先看看呼叫的流程圖:
(3)有圖可以看出,例項物件有乙個指向circle類的指標,同時circle類有乙個指向其對應的**的指標,shape也有乙個指向其對應**的指標。
3.例項變數的繼承:
(1)子類除了可以繼承父類的例項變數還可以按自己的需要新增新的例項變數,而這些例項變數在記憶體裡的布局情況是這樣的:
(2)從上圖可以看出,第乙個是nsobject宣告的乙個名為isa的例項變數,該變數儲存乙個指標指向該物件的類,接下來是shape的例項變數,最後是子類自己新增的新變數
(3)每個方法的呼叫都獲得乙個self隱藏引數,它是乙個指向接收訊息的物件的指標。方法是使用self引數來查詢它們要使用的例項變數的。如下圖:
4.重寫方法:
(1)當子類進行方法的重寫時,父類的方法內容會被覆蓋掉,這時是執行子類重寫的方法。但有時還是要從子類裡使用父類的原來的那個方法,這時可以使用super關鍵字。
(2)使用super的例子:
[plain]view plain
copy
@implemention circle
-(void) setfillcolor : (shapecolor) c
[ super setfillcolor : c ];
} @end//使用super使用父類的原方法
流程圖如下:
IOS之Objective C學習筆記(六)
今天繼續記錄我的學習過程,現在開始 1.nsarray 是乙個cocoa類,用來儲存物件的有序列表,你可以在nsarray中放入任意型別的物件 nsstring,car,shape,tire或者其他物件。不過值得注意的是,它有兩個 限制,首先它只能儲存objective c的物件,而不能儲存c語言的...
ios之Objective c物件導向程式設計測試
import inte ce person nsobject void create nsstring name float weight void eat int cnt void walk int num end implementation person void create nsstrin...
IOS開發之路 Objective C 復合
今天先補充一下很有必要記住的東西.物件 d,i 整數 u 無符整形 f 浮點 雙字 x,x 二進位制整數 o 八進位制整數 zu size t p 指標 e 浮點 雙字 科學計算 g 浮點 雙字 s c 字串 s pascal字串 c 字元 c unichar lld 64位長整數 long lon...