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

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

个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持!
在这里插入图片描述

##前言

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

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页