關於面向對象中的繼承問題其實不難理解spa
當咱們的代碼中的不一樣類出現大量相同的屬性和方法的時候,咱們就能夠用繼承來減小重複代碼的使用,這樣能夠大大提升代碼的效率,也能夠方便後期代碼的維護。.net
首先,繼承須要有子類和父類,一般OC中的父類是NSObject,可是在某些時候,當咱們的類須要繼承某些屬性和功能的時候,咱們就能夠本身設置該父類。下面用一個具體的實例說明。3d
例如,如今有狗和貓兩個類,他們同時具備姓名和體重兩個屬性,以及具備跑這個方法,此時若是單獨實現必然要在兩個不一樣的類裏面分別寫出各自的屬性和方法,可是這樣就形成了代碼的重複,所以咱們能夠考慮狗和貓能夠同時繼承同一個類的orm
屬性和方法,例如將該類命名爲動物。對象
animal的接口文件:繼承
#import <Foundation/Foundation.h>接口
@interface Animal : NSObjectget
{it
int _weight;io
NSString *_name;
}
-(void) setWeight : (int) weight;
-(int) weight;
-(void) setName : (NSString *) name;
-(void) run;
animal的接口文件的實現:
#import "Animal.h"
@implementation Animal
-(void) setWeight : (int) weight
{
_weight = weight;
}
-(int) weight
{
return _weight;
}
-(void) setName : (NSString *) name
{
_name = name;
}
-(void) run
{
NSLog(@"%@跑起來了",_name);
}
@end
而此時狗和貓兩個類就能夠直接繼承animal的屬性和方法
dog.h文件:
#import <Foundation/Foundation.h>
//在頭文件中導入animal類
#import "Animal.h"
//將繼承對象改成 animal
@interface Dog : Animal
@end
cat.h文件:
#import <Foundation/Foundation.h>
#import "Animal.h"
@interface Cat: Animal
@end
此時兩者接口實現中不用再寫
main.m文件
#import <Foundation/Foundation.h>
#import "Animal.h"
#include "Cat.h"
#include "Dog.h"
int main()
{
Cat *cat =[Cat new];
[cat setWeight:2];
[cat setName:@"阿飛"];
[cat run];
Dog *dog =[Dog new];
[dog setWeight:8];
[dog setName:@"阿旺"];
[dog run]
return 0;
}
另外,子類的方法能夠重寫,此時再也不繼承父類方法。可是同一屬性只能是本身的或繼承父類的,而不能同時存在。
super關鍵字
1. 做用:既能夠重寫,又能調用超類的實現方式。
2. 語法:[super setNumber:number]
3. 注意:super關鍵字在對象方法中就調用對象方法,類方法中就調用類方法
4. 使用場合:子類重寫父類的方法又想保留父類的行爲。