版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GULINHAI12/article/details/78772313
转载请标明出处:【顾林海的博客】
个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持!
##前言
在前面的程序Person.h文件中可以看到,Person继承了NSObject,通过继承可以获取自身定义的实例变量和方法外,还会拥有在NSObject中定义的实例变量和方法。
##实例
#import <Foundation/Foundation.h>
@interface Person : NSObject
//定义两个属性
@property (nonatomic) int _age;
@property (nonatomic,readwrite) NSString *_name;
- (void) printPersonInfo;
@end
#import "Person.h"
@implementation Person
- (void)printPersonInfo{
int age=[self _age];
if(age<30){
NSLog(@"age=%d,name=%@",__age,__name);
}else{
NSLog(@"error");
}
}
@end
上面的程序还是上一篇笔记中的程序。接着继续创建继承自Person的Child类:
#import "Person.h"
@interface Child : Person
@property (nonatomic) int _grade;
-(int)getGrade;
@end
#import "Child.h"
@implementation Child
-(int) getGrade{
if(self._age>8&&self._age<23){
return self._grade;
}else{
return -1;
}
}
@end
#import <Foundation/Foundation.h>
#import "Child.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Child *person=[[Child alloc]init];
person._name=@"bill";
person._age=26;
[person printPersonInfo];
int grade=[person getGrade];
NSLog(@"name=%@,age=%d,grade=%d",person._name,person._age,grade);
}
return 0;
}
运行程序:
age=26,name=bill
name=bill,age=26,grade=-1
##覆盖方法
#import "Child.h"
@implementation Child
-(int) getGrade{
if(self._age>8&&self._age<23){
return self._grade;
}else{
return 0;
}
}
-(void)printPersonInfo{
NSLog(@"grade=%d",self._grade);
}
@end
在Child.m中覆盖了父类Person.m中的printPersonInfo方法。
输出结果:
grade=0
name=bill,age=26,grade=0
##Super
覆盖一个方法的时候,子类可以利用父类的实现,而不是整体替换,这时可以用到 Super指令 :
#import "Child.h"
@implementation Child
-(int) getGrade{
if(self._age>8&&self._age<23){
return self._grade;
}else{
return 0;
}
}
-(void)printPersonInfo{
[super printPersonInfo];
NSLog(@"grade=%d",self._grade);
}
@end
输出结果:
age=26,name=bill
grade=0
name=bill,age=26,grade=0