Objective-C學習筆記

來源:互聯網
上載者:User

標籤:interface   標示   程式 objective-c   

第四章 繼承

 繼承的文法格式:@interface Circle: NSObject。冒號後邊的標示符石需要繼承的類。 OC中不支援多繼承。 

第一個帶有繼承的程式

 @interface Shape : NSObject{

 ShapeColor fillColor; ShapeRect bounds;

 }

 -(void) setFillColor : (ShapeColor)fillColor; 

-(void) setBounds : (ShapeBounds)bounds; 

-(void) draw; 

@end//Shape 

@implementation Shape 

-(void) setFillColor : (ShapeColor)c { 

fillColor = c; }//setFillColor

 -(void) setBounds : (ShapeRect)b {

 bounds = b; }//setBounds 

-(void) draw { }//draw 

@end //Shape 

@interface Circle : Shape 

@end//Circle 

@interface Rectangle : Shape 

@end//Rectangle 

實現部分 

@implementation Rectangle

 -(void)draw { 

NSLog(@“ drawing rect at(%d %d %d %d) in %@“,

 bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)); 

}//draw 

@end //Rectangle 

@implementation Circle -(void)draw {

 NSLog(@“ drawing circle at(%d %d %d %d) in %@“, 

bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)); 

}//draw

 @end //Circle 

有關術語

 超類(superclass)是繼承的類。如circle的超類是shape,而shape的超類時NSObject。 

子類(subclass)是執行繼承的類。circle時shape的子類,而shape時NSObject的子類。 

如果想改變方法的實現,需要重寫(override)繼承的方法。 因為繼承在子類和超類之間建立了一種“is a”(是一個)的關係,所以NSObject的執行個體變數叫做isa。即rectangle是一個shape,circle是一個shape。(參考網上他人的見解:isa則相當於java中每個對象的class,就像我們平時寫的,XXX.getClass()或XXX.class。OC中的isa指向了其類對象,想一下,我們在java中使用反射時不都是需要取得其類對象嘛!OC也一樣,類對象isa也是用在運行時擷取對象的類資訊的。這樣說其實和java中的class概念是一致的。 ) 

使用更具體種類的對象(rectangle和circle)來代替一般類型(shape),這種能力稱為多態性。 

每個方法調用都獲得了一個名為self的隱藏參數,它是一個指向接收資訊的對象的指標。 重寫是指在類中聲明一個方法,但是讓該方法的實現部分為空白,然後每個子類都可以實現各自的方法,例如在shape類中的draw方法就是一個例子。 

OC提供了一種super作為關鍵字的方法,讓你即可以重寫方法的實現,又能調用超類中的實現的方式。例如:

 @implementation Circle -(void)setFillColor:(ShapeColor)c { if(c==kRedColor){c = kGreenColor;} [super setFillColor:c]; }@end 

請求超類響應資訊[super setFillColor:c]並將顏色放入到執行個體變數中。

super是OC提供的一種神奇的功能,當向super發送訊息時,實際上是在請求OC向該類的超類發送訊息。如果超類中沒有,OC會繼續向繼承鏈的上一級中尋找。

    第四章到此結束,除了請求超類響應資訊這一塊難以很好的理解之外,其他的都還可以。從第五章開始,感覺變的不好理解了,有些知識點反覆看了幾遍還是不能很透徹的理解。。哎

Objective-C學習筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.