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关键会在另外个博文说明。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。