Objective-C的继承与复合

作者: mymdeep | 来源:发表于2017-01-13 23:17 被阅读29次

从毕业开始一直都在做Android开发,近期开始学习Objective-C,接下来的几篇文章会具体介绍一些Objective-C的基础知识,也算是检验一下自己学习的成果。
对比代码效果更好一些,我将代码放在了github上:
https://github.com/mymdeep/OC_foundation

继承

继承的语法格式

@interface xxxx:NSObject

冒号后面的标识符是需要继承的类,需要注意的是OC不支持多继承,这点跟Android是一样的,需要的话可以通过类别或者协议来实现(后面会介绍),就好像Android的接口。

示例代码:

@interface Person : NSObject
{
    
    NSString *name;
    NSString *sex;
    NSString *age;
    Hand *hands[2];
    Foot *foots[2];

}
-(void)setName:(NSString*) name;
-(void)setSex:(NSString*) sex;
-(void)setAge:(NSString*) age;
-(void)print;
-(void)desc;
@end
@implementation Person
-(void)setName:(NSString*) n{
    name = n;
}
-(void)setSex:(NSString*) s{
    sex = s;
}
-(void)setAge:(NSString*) a{
    age = a;
}
-(void)print{
    NSLog(@"name:%@,sex:%@,age:%@",name,sex,age);
}
-(id)init{
    hands[0] = [Hand new];
    hands[1] = [Hand new];
    foots[0] = [Foot new];
    foots[1] = [Foot new];
    return self;
}
-(void)desc{
    [hands[0] desc];
    [foots[0] desc];
}
@end

这是我定义的一个Person类,如果此时我需要一个Student类,构造与Person一样,唯一不同的print方法不一样,我们可以像如下一样实现:

@interface Student : Person

@end
@implementation Student
-(void)print{
    NSLog(@"学生:name:%@,sex:%@,age:%@",name,sex,age);
}
@end

super

当在子类想实现父类的方法时,可以使用super关键字:

-(void)print{
    [super print];
    NSLog(@"学生:name:%@,sex:%@,age:%@",name,sex,age);
}

复合

在objective-c中,复合是通过包含作为实例变量的对象指针实现的。例如上面代码中的Person类,包含一个Hand类的实例变量,一个Doot类的实例变量。
更多的开发知识,可以关注我的公众号:


相关文章

网友评论

    本文标题:Objective-C的继承与复合

    本文链接:https://www.haomeiwen.com/subject/zctebttx.html