OC语言——三大特性-继承与多态

继承是oc中比较常见的。

1、继承:

就是当两个类拥有相同的属性和方法时,就可以将相同的东西抽取到一个父类中。子类可以拥有父类中所有的成员变量和方法。

2、继承的好处:

可以抽取重复代码,节省时间。建立了类之间的关系。

3、使用注意:

父类必须写在子类前面

子类不能拥有和父类相同的名称的成员变量

当调用某个方法时,优先去当前类中找,如果找不到,再去父类中找。

4、组合

@interface Score : NSObject
{
    int _oScore;
    int _ocScore;
}
@end

// 实现

@implementation Score
@end


@interface Student : NSObject
{ 
// 组合 A*_a;
Score * _score;
int _age;
}
@end

5、super

1>直接调用父类中的某个方法

2>super处在对象中,那么就会调用父类的对象方法

      super处在类方法中,那么就会调用父类的类方法

3>使用场合:子类重写父类方法时想保留父类的一些行为

举例说明:

// 设置一个类为A  声明并且实现

@interface A : NSObject
- (void)speak;
@end

@implementation A
- (void)speak
{
    NSLog(@"这里是A");
}
@end

//B继承A

@interface B : A
@end

@implementation B

// 重写。并使用父类的行为
- (void)speak
{
    NSLog(@"这里是B");
    // 这里使用super代表着指向的是A里面的speak
    [super speak]
}
@end


6、多态

字面上理解就是多种状态,有继承才有多态

代码的体现:父类类型的指针指向子类的对象

好处:如果函数、方法中的参数使用的是父类类型可以传入父类、子类对象

局限性:父类类型的变量不能直接调用子类特有的方法,如果要使用,必须强转为子类类型的变量后,才能直接调用子类特有的方法。

@interface Animal : NSObject
- (void)eat
@end
@implementation Animal
- (void)eat
{
    NSLog(@"动物吃东西")
}
@end
// 子类:继承动物
@interface Dog : Animal
@end
@implementation Dog
- (void)eat
{
    NSLog(@"gou吃东西")
}

@end

在函数中调用
int main()
{
    // 定义一个Dog类型的指针指向dog对象
    Dog *d = [Dog new];
    // 父类指针指向子类对象
    Animal *a = [Dog new];
    // 看似animal实际是dog 所以会去dog类型里面找eat
    // 调用方法时会检测对象的真实形参
    [a eat]
    // NSObject *n = [Dog new];
    // NSObject *n1 = [Animal new];
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值