OC 類的繼承 方法重載重寫


資料一:

一、類的繼承

Objective-c中類的繼承與C++類似,不同的是Objective-c不支持多重繼承,一個類只能有一個父類,單繼承使Objective-c的繼承關系很簡單,易於管理程序。
Objective-c中所有類的父類是NSObject。

Objective-c中類的繼承例子:

 

   @interface Person: NSObject {    
       NSString* name;    

int age;    

}    

- (NSString*) name;    

- (int) age;    

- (void) setName: (NSString*) input;    

- (void) setAge: (int) input;    

@end; 

 

二、方法重寫

在Objective-c中,子類可繼承父類中的方法,而不需要重新編寫相同的方法,直接可以使用父類的方法。
但有時我們不想使用使用父類方法,而是想作一定的修改,怎么辦呢?只要將子類中書寫一個與父類具有相同的方法名、返回類型和參數,就可以將將父類的方法覆蓋重寫。比較簡單。

 

三、方法重載

在Objective-c中,方法是不能重載的。也就是說我們不能在類中定義這樣的兩個方法:它們的名子相同,參數個數相同,參數類型不同,不同的返回值類型。否則Xcode會報錯。
下面定義的方法是錯誤的:

 

-(void)setX:(int)intX;  

-(void)setX:(double)doubleX;

  

資料二:

1.什么是重載?oc中不存在重載。

在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數

C++函數名相同是函數的名稱相同。參數列表不同指參數的個數或者類型不同。

oc中函數名相同包含函數名稱和所有的標簽相同。oc不允許同一作用域內的同名函數,因此不允許重載。

即不允許函數名相同,參數個數相同,但類型不同的兩個函數存在。

在oc中同一作用域內不允許相同函數名,因此oc中沒有嚴格意義的重載。如:

 

-(void) test:(int) intValue;
-(void) test:(float) floatValue; 
在c++中構成重載,因為函數名test重復,但參數類型不同。在oc中錯誤,因為函數名都是test,不構成重載
-(void) test:(int) x andY:(int) y;
-(void) test:(int) x andY:(double)y;//錯誤,還是重名了,函數名都是(test:andY:)
-(void) test:(int) x :(double) y; //正確,名字不同  (test::)

通過一個方法包含另一個方法,達到類似重載的功能,它們具有不同的函數名。通常用於構造函數,如:

init()

intwithx(){包含對init的調用}

intwithxy().....{包含對initx的調用}

越具體的函數可以在前面已有方法基礎上建立

 

 

2.什么是重寫?

重寫發生在子類和父類之間,通過在子類中定義和父類相同方法名的方法,修改從父類繼承過來的方法定義。

重寫的作用是修改從父類繼承過來的方法定義。(繼承只能增加,修改,不能減少或者刪除父類方法)

重寫的要求:包括所有的標簽相同即包括了參數個數需要相同,並且返回值要相同。

重寫之后的方法查找過程:使用子類指針調用方法時,優先選擇子類方法,沒有的情況下才尋找父類的方法。

若要直接使用父類方法,使用super.體現了父子之間的多態性,如何尋找父子同名方法

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM