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

来源:互联网 发布:饶毅 知乎 编辑:程序博客网 时间:2024/05/10 20:44

继承是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;}


0 0
原创粉丝点击