oc——类的继承

oc——类的继承

🎇继承是面向对象的三大特征之一,在了解类的继承之前我们要先理解一下什么是父类,对于oc来说,每一个子类只有一个直接父类,通俗点讲,如果把人类看作一个父类,那么学生就是人类的一个子类,人类能干的事情学生一定也能干,但是学生能干的事情人类并不一定能干,首先我们来看一个例子。
我们首先来写一个Person类:

//Person.h
@interface Person : NSObject
- (void) Work;
@end

//person.m
#import <Foundation/Foundation.h>
#import "Person.h"
@implementation Person
- (void) Work {
    NSLog(@"workevery");
}
@end

然后我们来写一个Student类,它的父类是Person类。

//  Student.h
#import "Person.h"
@interface Student : Person
//- (void) Work;//首先不对它声明任何方法
@end
#import <Foundation/Foundation.h>
#import "Student.h"
@implementation Student
/*- (void) Work {        //同样也不定义
    NSLog(@"play");
}*/
@end

然后我们在主函数里来试试:

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main (int argc, char * argv[]) {
    @autoreleasepool {
        Person * xiaoming = [[Person alloc] init];//首先定义一个Person类的xiaoming
        [xiaoming Work];//让小明运行Work方法
        Student * xiaohong = [[Student alloc] init];//再定义一个Student类的xiao'hong
        [xiaohong Work];//同样让小红运行Work方法
    }
}


在这里插入图片描述
🎇我们可以发现xiaohong完全可以运行Work这个方法,因此可证明子类的变量可以直接运行父类的方法;但是如果子类中有和父类相同的方法我们该怎么办?

我们来给Student类上加上Work方法

//  Student.h
#import "Person.h"
@interface Student : Person
- (void) Work;
@end
//  Student.m
#import <Foundation/Foundation.h>
#import "Student.h"
@implementation Student
- (void) Work {
    NSLog(@"play");
}
@end

main函数不变,我们来看运行结果:
在这里插入图片描述

super关键字

🎇xiaohong先运行了Student里的方法,到了这里,我们面临一个问题,如果小红想运行Person里的Work怎么办?
这时候就要用到了一个新的关键字super,super用于在子类中调用父类中被覆盖的实例方法。
我们在代码中加上super关键字

//  Student.m
#import <Foundation/Foundation.h>
#import "Student.h"
@implementation Student
- (void) Work {
    [super Work];
    NSLog(@"play");
}
@end

然后我们来看运行结果:
在这里插入图片描述
xiaohong既运行了父类中的Work方法,又运行了子类中的Work方法。

✨需要注意的一点:
super是Objective-c提供的一个关键字,super用于限定该对象调用它从父类继承得到的属性和方法。
正如self不能出现在类方法中一样,super也不能出现在类方法中。类方法的调用者只能是类本身,而不是对象,因而super关键字也就失去了意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值