温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

object-c中的继承

发布时间:2020-07-09 07:30:13 来源:网络 阅读:550 作者:Mr_Dai 栏目:开发技术

在面向对象的语言中都会由继承这种语法,而继承我们通常使用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关键会在另外个博文说明。


向AI问一下细节
推荐阅读:
  1. Object-C关联
  2. js中的继承

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI