面向对象 - 继承

继承基本概念

可以利用继承来解决当前重复代码太多的问题,只要A类继承了B类,那么A类就拥有了B类的所有属性和方法(对象方法和类方法)
如果子类中有和父类同名的方法,我们称之为方法重写

注意:

继承中的方法调用顺序,如果自己有就调用自己的,如果自己没有就调用父类的
方法的调用顺序,先自己再父类,如果父类中没有,就去父类的父类中找,一直向上找,直到找到NSObject类都没有找到,则会报错
在继承中方法可以重写,但是属性(成员变量)不能被重写

缺点:

耦合性太强(依赖性太强),加入父类不能用了,子类就都不能用了

super 基本概念

super是个编译器的指令符号,只是告诉编译器在执行的时候,去调用谁
与self类似,super指向的是当前类的父类,可以使用super给父类发送消息,执行父类的方法
super在对象方法中,那么就会调用父类的对象方法。
super在类方法中,那么就会调用父类的类方法

[super say];	// 调用父类中的say方法

继承基本应用

  • 定义一个Phone类,Phone类中有一个打电话的方法
  • 再定义一个Iphone类和Android类分别继承Phone类
  • 在Iphone类中重写了父类中的打电话方法,然后在Iphone自己的打电话方法中使用super调用了父类中的打电话的方法
#import <Foundation/Foundation.h>


// 定义父类Phone
@interface Phone:NSObject
{
    int _cpu;
}

// 打电话
-(void)call:(int)number;

@end


// 实现父类Phone
@implementation Phone

// 打电话
-(void)call:(int)number{
    NSLog(@"给%i打电话", number);
}

@end

// 定义一个Iphone类继承Phone类
@interface Iphone:Phone

@end

// 实现Ipone类
@implementation Iphone
// 在Iphone类中重写父类打电话的方法
-(void)call:(int)number{
//    NSLog(@"给%i打电话", number);
    NSLog(@"解锁");
    // 使用super 调用父类中的call方法
    [super call:number];
}
@end


// 定义一个Android类继承Phone类
@interface Android:Phone

@end

// 实现Android类
@implementation Android

@end

int main(int argc, const char * argv[]) {

    Iphone *iphone = [Iphone new];
    Android *android = [Android new];

    [iphone call:1383838338];   // 给1383838338打电话

    [android call:1343434334];  // 给1343434334打电话
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值