holydancer原创,如需转载,请在显要位置注明:
转自holydancer的专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7334377
OC中的继承和JAVA,C++都有相似之处,很容易理解,虽然不能多继承,但是有专门的方法和途径解决这个问题,今天只做单继承和多态的简单示范,新建一个Person类,包括.h和.m文件,然后Men类和Women类继承自该类,并重写了继承过来的cry方法,然后在main()方法中创建实例指向父类Person引用,简单多态后输出语句,具体结构如下:
Person.h代码如下:
[plain] view plain copy #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代码如下:
[cpp] view plain copy #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:
[plain] view plain copy #import "Person.h" @interface men : Person @end 然后是men.m:
[plain] view plain copy #import "men.h" @implementation men -(void)cry { NSLog(@"男人就要哭得响亮"); } @end women.h
[plain] view plain copy #import "Person.h" @interface women : Person @end women.m
[plain] view plain copy #import "women.h" @implementation women -(void)cry { NSLog(@"女人就是要哭得委婉"); } @end 最后在main()方法中进行测试:
[plain] view plain copy #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; } 最后得到以下输出结果: