資料一:
一、類的繼承
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中沒有嚴格意義的重載。如:
在c++中構成重載,因為函數名test重復,但參數類型不同。在oc中錯誤,因為函數名都是test,不構成重載
通過一個方法包含另一個方法,達到類似重載的功能,它們具有不同的函數名。通常用於構造函數,如:
init()
intwithx(){包含對init的調用}
intwithxy().....{包含對initx的調用}
越具體的函數可以在前面已有方法基礎上建立
2.什么是重寫?
重寫發生在子類和父類之間,通過在子類中定義和父類相同方法名的方法,修改從父類繼承過來的方法定義。
重寫的作用是修改從父類繼承過來的方法定義。(繼承只能增加,修改,不能減少或者刪除父類方法)
重寫的要求:包括所有的標簽相同即包括了參數個數需要相同,並且返回值要相同。
重寫之后的方法查找過程:使用子類指針調用方法時,優先選擇子類方法,沒有的情況下才尋找父類的方法。
若要直接使用父類方法,使用super.體現了父子之間的多態性,如何尋找父子同名方法