多态 ,

来源:互联网 发布:如何爬取网页的js脚本 编辑:程序博客网 时间:2024/06/09 21:02

建立父类Person类

person.h

#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic,copy)NSString *name;@property (nonatomic,retain)NSNumber *age;-(instancetype)initWithName:(NSString *)name                        age:(NSNumber *)age;+(Person *)personWithName:(NSString *)name age:(NSNumber *)age;@end

person.m

#import "Person.h"@implementation Person@synthesize name=_name;-(instancetype)initWithName:(NSString *)name                        age:(NSNumber *)age{    self=[super init];    if (self) {        //使用点语法调用它的setter方法,        //使之retain或者copy一下.       self.name=name;       self.age=age;    }    return self;}+(Person *)personWithName:(NSString *)name age:(NSNumber *)age{    Person *p=[[Person alloc] initWithName:name age:age];    //使用了autorelease释放对象.    return [p autorelease];}//getter,setter,用实例变量   _name//dealloc 用实例变量  _name//初始化-(void)setName:(NSString *)name{    if (_name!=name) {        [_name release];        _name=[name copy];    }}-(NSString *)name{    return [[_name retain] autorelease];}-(void)dealloc{    [_name release];    [_age release];    [super dealloc];}@end

子类Student继承Person

Student.h

#import "Person.h"@interface Student : Person@property (nonatomic,copy)NSString *stuNum;-(void)sayHi;-(instancetype)initWithName:(NSString *)name                        age:(NSNumber *)age                     stuNum:(NSString *)stuNum;+(Student *)stuWithName:(NSString *)name                     age:(NSNumber *)age                  stuNum:(NSString *)stuNum;@end

Student.m

#import "Student.h"@implementation Student@synthesize stuNum=_stuNum;-(void)dealloc{    [_stuNum release];    [super dealloc];}-(void)sayHi{        NSLog(@"hi");//    [_stuNum release];//    [super dealloc];}-(instancetype)initWithName:(NSString *)name                        age:(NSNumber *)age                     stuNum:(NSString *)stuNum;{    self=[super init];    if (self) {        self.stuNum=stuNum;    }    return self;}+(Student *)stuWithName:(NSString *)name                     age:(NSNumber *)age                  stuNum:(NSString *)stuNum{    Student *s=[[Student alloc]initWithName:name age:age stuNum:stuNum];    return [s autorelease];            }@end

main.m里边

#import <Foundation/Foundation.h>#import "Person.h"#import "Student.h"int main(int argc, const char * argv[]){    @autoreleasepool {                /*        Person *p=[[Person alloc] init];        [p retain];        NSLog(@"%ld",[p retainCount]);                NSArray *array=[[NSArray alloc] initWithObjects:p, nil];        NSLog(@"%ld",[p retainCount]);                [array release];        NSLog(@"%ld",[p retainCount]);                //当我们将一对象放入容器中的时候,该对象的计数+1.        //当我们吧容器释放掉之后,容器中的对象引用计数全部-1                [p release];        [p release];           */                               //父类指针指向子类对象        //多态                Person *stu=[Student stuWithName:@"wangxiaoer" age:@18 stuNum:@"110"];        stu.name=@"wangxiaoesa";        stu.age=@10;//        [stu sayHi];                Student *s= (Student *)stu;                s.stuNum=@"1230";                                                                                                    }    return 0;}


0 0
原创粉丝点击