object-c中的繼承

在面向對象的語言中都會由繼承這種語法,而繼承我們通常使用is a 來確定繼承的關係,在objcet-c中繼承是使用冒號來確定繼承的,從下面的例子來了解繼承:

1.創建一個studet的對象

------聲明

#import <Foundation/Foundation.h>

//我們創建的類必須繼承了NSobject對象

@interface student : NSObject{

int _age;

}

-(void)setAge:(int) newAge;

-(int) age;

@end


#import "student.h"


-----實現方法

@implementation student

-(void)setAge:(int)newAge{

_age =newAge;

}

-(int)age{

return_age;

}

@end

2.創建一個叫小明的學生繼承了student

---聲明

#import <Foundation/Foundation.h>

#import "student.h"

//@class student --------------------這裏不能使用@class關鍵字來引用

@interface liming : student

{

NSString *name;

}

//子類特有的方法

-(void)speak;

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

-(NSString *) name;

@end

------實現


#import "liming.h"

@implementation liming

-(void)setName:(NSString *)newName{

name = newName;

}

-(NSString *)name{

returnname;

}

- (NSString *)description

{

return [NSStringstringWithFormat:@"my name is %@", name];

}

-(void)speak{

NSLog(@"hello my age is %i",self.age);

}

@end


-----mian方法


#import <Foundation/Foundation.h>

#import "student.h"

#import "liming.h"

int main(int argc, constchar * argv[])

{

@autoreleasepool {

liming *lim =  [[limingalloc]init];

       lim.age = 23;

       lim.name =@"小明";

//%@是調用OC中的descrition方法,我們在liming類中重寫了description方法

NSLog(@"%@",lim);


   }


//創建子類使用父類進行接受

student *ss = [[limingalloc]init];

ss.age=22;

//        //使用父類進行接收對象依然是可以進行調用子類中的方法,但是Xcode會報警告,Student中沒有這個方法。

 [ss speak];

return0;

}


OC中繼承:

1.在OC中繼承是單繼承的。liming類繼承了student類,就不能繼承其他類。
2.在OC中使用的繼承的時候我們不能使用關鍵字@class來進行包含繼承的類,只能使用@Import來包含我們的繼承類,因爲我們的如果要繼承一個類要知道該類中有什麼的方法,因此我們不能使用@class來進行包含我們的類。
3.在OC中創建一個子類可以使用父類來進行接收,但是在調用子類的方法的時候,系統是可以進行調用,但是Xcode會報警告但是程序可以運行,不建議使用父類來接受子類。至於爲什麼可以執行成功可以通過繼承的機制來解答。

4.在繼承的機制中,對於方法的調用是從子類開始找方法,如果找到方法就會執行子類中的方法,如果沒有找到就會到父類中進行查找。再調用父類中的方法。在繼承的關係中變量的使用,是從父類開始找。



@class關鍵會在另外個博文說明。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章