IOS开发笔记17-Object-C中的继承

来源:互联网 发布:priest 锦瑟 知乎 编辑:程序博客网 时间:2024/06/08 09:56

转载请标明出处:【顾林海的博客】

前言

在前面的程序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

原创粉丝点击