holydancer原创,如需转载,请在显要位置注明:
转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7334377
OC中的继承和JAVA,C++都有相似之处,很容易理解,虽然不能多继承,但是有专门的方法和途径解决这个问题,今天只做单继承和多态的简单示范,新建一个Person类,包括.h和.m文件,然后Men类和Women类继承自该类,并重写了继承过来的cry方法,然后在main()方法中创建实例指向父类Person引用,简单多态后输出语句,具体结构如下:
Person.h代码如下:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int age;
NSString *name;
}
-(void)setAge:(int)age setName:(NSString *)name;//age 和 name的set方法
-(void)cry; //呆会儿子类继承该方法后要复写
//下面是age和name的get方法,不写get是因为OC中get方法一般以指针为参数;
-(int)age;
-(NSString *)name;
@end
Person.m代码如下:
#import "Person.h"
@implementation Person
-(void)setAge:(int)a setName:(NSString *)n
{
name=n;
age=a;
}
-(int)age
{
return age;
}
-(NSString *)name
{
return name;
}
-(void)cry
{
NSLog(@"是人都会哭");
}
@end
接下来是men.h:
#import "Person.h"
@interface men : Person
@end
然后是men.m:
#import "men.h"
@implementation men
-(void)cry
{
NSLog(@"男人就要哭得响亮");
}
@end
women.h
#import "Person.h"
@interface women : Person
@end
women.m
#import "women.h"
@implementation women
-(void)cry
{
NSLog(@"女人就是要哭得委婉");
}
@end
最后在main()方法中进行测试:
#import <Foundation/Foundation.h>
#import "Person.h"
#import "men.h"
#import "women.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *person = [Person new];
Person *man = [men new];//子类对象指向父类引用;
Person *woman = [women new];
[man setAge:23 setName:@"男人"];//子类对象使用继承来的方法;
[woman setAge:21 setName:@"女人"];
NSLog(@"我的名字是%@,我的年龄是%d",[man name],[man age]);
NSLog(@"我的名字是%@,我的年龄是%d",[woman name],[woman age]);
[person cry];//父类中的cry方法;
[man cry]; //子类对象复写了父类的方法;
[woman cry];
}
return 0;
}
最后得到以下输出结果:
关键字:objective-c ,objective c , oc ,继承,多态 ,面向对象