郝萌主傾心貢獻(xiàn),尊重作者的勞動(dòng)成果,請(qǐng)勿轉(zhuǎn)載。
師宗網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
如果文章對(duì)您有所幫助,歡迎給作者捐贈(zèng),支持郝萌主,捐贈(zèng)數(shù)額隨意,重在心意^_^
我要捐贈(zèng): 點(diǎn)擊捐贈(zèng)
Cocos2d-X×××:點(diǎn)我傳送
當(dāng)然,這一切要從根類開始:
沒有父類的類,位于類層次結(jié)構(gòu)的最頂層,稱為根(Root)類。
NSObject是層次結(jié)構(gòu)的最頂端(也就是它上面沒有任何類),因此稱為根類。
如果使用術(shù)語(yǔ),可以將類稱為子類和父類。同樣,也可以將類稱為子類和超類。
需要注意的是,要在子類中直接使用實(shí)例變量,必須先在接口部分聲明。
在實(shí)現(xiàn)部分聲明和合成(synthesize)的實(shí)例變量是私有的,子類中并不能夠直接訪問,
需要明確定義或合成取值方法,才能訪問實(shí)例變量的值。
繼承的概念作用于整個(gè)繼承鏈。
一定要理解以下事實(shí):類的每個(gè)實(shí)例都擁有自己的實(shí)例變量,即使這些實(shí)例變量是繼承來(lái)的。
找出正確的方法:
首先,檢查該對(duì)象所屬的類,以查看在該類中是否明確定義了一個(gè)具有指定名稱的方法。
如果有,就使用這個(gè)方法。如果沒有定義,就檢查它的父類。
如果父類中有定義,就使用這個(gè)方法,否者,繼續(xù)找尋。
直到找到根類也沒有發(fā)現(xiàn)任何方法。
通過繼承來(lái)擴(kuò)展:添加新方法
繼承通常用于擴(kuò)展一個(gè)類。
@class指令:
@class XYPoint;
或
#import "XYPoint.h"
使用@class指令提高了效率,因?yàn)榫幾g器不需要引入和處理整個(gè)XYPoint.h文件(雖然它很?。?/p>
只需要知道XYPoint是一個(gè)類名。
如果需要引用XYPoint類的方法(在實(shí)現(xiàn)部分中),@class指令是不夠的,因?yàn)榫幾g器需要更多的消息。
說的通俗點(diǎn):只引用了類就用@class不然就用#import。
在默認(rèn)情況下,合成的設(shè)值方法只是簡(jiǎn)單地復(fù)制對(duì)象指針,而不是對(duì)象本身。
你可以合成另一種設(shè)值方法,而不是制作對(duì)象的副本。
方法重寫或者說是覆寫方法:
不能通過繼承刪除或減少方法,但可以利用覆寫來(lái)更改繼承方法的定義。
新方法必須具有相同的返回類型,并且參數(shù)的數(shù)目與覆寫的方法相同。
如果在不同的類中有名稱相同的方法,則根據(jù)作為消息的接收者的類選擇正確的方法。
為什么要?jiǎng)?chuàng)建子類?
有如下3個(gè)理由:
1)希望繼承一個(gè)類的方法,也許加入一些新的方法和或?qū)嵗兞俊?/p>
2)希望創(chuàng)建一個(gè)類的特別的版本。
3)希望通過覆寫一個(gè)或多個(gè)方法來(lái)改變類的默認(rèn)行為。
抽象類:
有時(shí),創(chuàng)建類只是為了更容易創(chuàng)建子類。
因此,這些類名為抽象(abstract)類,或等價(jià)地稱為抽象超類(abstract superclasses)。
在該類中定義方法和實(shí)例變量,但不期望任何人從該類創(chuàng)建實(shí)例。
注意:
#import <Foundation/NSObject.h> @interface Rectangle: NSObject { int width; int height; } -(Rectangle*) initWithWidth: (int) w height: (int) h; -(void) setWidth: (int) w; -(void) setHeight: (int) h; -(void) setWidth: (int) w height: (int) h; -(int) width; -(int) height; -(void) print; @end
#import "Rectangle.h" @implementation Rectangle -(Rectangle*) initWithWidth: (int) w height: (int) h { self = [super init]; if ( self ) { [self setWidth: w height: h]; } return self; } -(void) setWidth: (int) w { width = w; } -(void) setHeight: (int) h { height = h; } -(void) setWidth: (int) w height: (int) h { width = w; height = h; } -(int) width { return width; } -(int) height { return height; } -(void) print { NSLog(@"width = %i, height = %i", width, height ); } @end
#import "Rectangle.h" @interface Square: Rectangle -(Square*) initWithSize: (int) s; -(void) setSize: (int) s; -(int) size; @end
#import "Square.h" @implementation Square -(Square*) initWithSize: (int) s { self = [super init]; if ( self ) { [self setSize: s]; } return self; } -(void) setSize: (int) s { width = s; height = s; } -(int) size { return width; } -(void) setWidth: (int) w { [self setSize: w]; } -(void) setHeight: (int) h { [self setSize: h]; } @end
#import <Foundation/Foundation.h> #import "Square.h" #import "Rectangle.h" int main (int argc, const char * argv[]) { Rectangle *rec = [[Rectangle alloc] initWithWidth: 10 height: 20]; Square *sq = [[Square alloc] initWithSize: 15]; NSLog(@"Rectangle: " ); [rec print]; NSLog(@"Square: " ); [sq print]; [sq setWidth: 20]; NSLog(@"Square after change: " ); [sq print]; [rec release]; [sq release]; return 0; }
分享文章:Objective-C之成魔之路【10-繼承性】
鏈接地址:http://jinyejixie.com/article14/pdccde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、虛擬主機(jī)、ChatGPT、建站公司、手機(jī)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)