溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

object-c中的繼承

發(fā)布時(shí)間:2020-07-09 07:30:13 來源:網(wǎng)絡(luò) 閱讀:554 作者:Mr_Dai 欄目:開發(fā)技術(shù)

在面向?qū)ο蟮恼Z言中都會(huì)由繼承這種語法,而繼承我們通常使用is a 來確定繼承的關(guān)系,在objcet-c中繼承是使用冒號(hào)來確定繼承的,從下面的例子來了解繼承:

1.創(chuàng)建一個(gè)studet的對(duì)象

------聲明

#import <Foundation/Foundation.h>

//我們創(chuàng)建的類必須繼承了NSobject對(duì)象

@interface student : NSObject{

int _age;

}

-(void)setAge:(int) newAge;

-(int) age;

@end


#import "student.h"


-----實(shí)現(xiàn)方法

@implementation student

-(void)setAge:(int)newAge{

_age =newAge;

}

-(int)age{

return_age;

}

@end

2.創(chuàng)建一個(gè)叫小明的學(xué)生繼承了student

---聲明

#import <Foundation/Foundation.h>

#import "student.h"

//@class student --------------------這里不能使用@class關(guān)鍵字來引用

@interface liming : student

{

NSString *name;

}

//子類特有的方法

-(void)speak;

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

-(NSString *) name;

@end

------實(shí)現(xiàn)


#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 =@"小明";

//%@是調(diào)用OC中的descrition方法,我們?cè)趌iming類中重寫了description方法

NSLog(@"%@",lim);


   }


//創(chuàng)建子類使用父類進(jìn)行接受

student *ss = [[limingalloc]init];

ss.age=22;

//        //使用父類進(jìn)行接收對(duì)象依然是可以進(jìn)行調(diào)用子類中的方法,但是Xcode會(huì)報(bào)警告,Student中沒有這個(gè)方法。

 [ss speak];

return0;

}


OC中繼承:

1.在OC中繼承是單繼承的。liming類繼承了student類,就不能繼承其他類。
2.在OC中使用的繼承的時(shí)候我們不能使用關(guān)鍵字@class來進(jìn)行包含繼承的類,只能使用@Import來包含我們的繼承類,因?yàn)槲覀兊娜绻^承一個(gè)類要知道該類中有什么的方法,因此我們不能使用@class來進(jìn)行包含我們的類。
3.在OC中創(chuàng)建一個(gè)子類可以使用父類來進(jìn)行接收,但是在調(diào)用子類的方法的時(shí)候,系統(tǒng)是可以進(jìn)行調(diào)用,但是Xcode會(huì)報(bào)警告但是程序可以運(yùn)行,不建議使用父類來接受子類。至于為什么可以執(zhí)行成功可以通過繼承的機(jī)制來解答。

4.在繼承的機(jī)制中,對(duì)于方法的調(diào)用是從子類開始找方法,如果找到方法就會(huì)執(zhí)行子類中的方法,如果沒有找到就會(huì)到父類中進(jìn)行查找。再調(diào)用父類中的方法。在繼承的關(guān)系中變量的使用,是從父類開始找。



@class關(guān)鍵會(huì)在另外個(gè)博文說明。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI