object 知识总结(案例学习)

Person.h


#import <Foundation/Foundation.h>


@interface Person : NSObject

{

    NSString * name;

    int age;

}

-(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge;  //类初始化构造方法

-(NSString *) getName;

-(void)name:(NSString *)aName;

-(int)getAge;

-(void)age:(int)aAge;

-(void) print;

@end


 
Person.m


#import "Person.h"


@implementation Person

    - (id)init  //初始化方法使用

    {

        if (self= [super init])

        {

            name = nil;

            age = 0;

        }

        

        return self;

    }


    -(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge  //多参数传值

    {

        if (self= [super init])

        {

            name = aName;

            age= aAge;

        }

        

        return self;

    }


    -(NSString *) getName{

        return name;

    }

    -(void)name:(NSString *)aName{

        if (name!=aName) {

            [aName retain];  //内存管理

            [name release];

            name = aName;

        }

       

    }

    -(int)getAge{

        return age;

    }

    -(void)age:(int) aAge{

        age = aAge;

    }

    -(void) print{

        

        NSLog(@"名字是:%@,年龄是:%d",name,age);

    }


    -(void) dealloc  //销毁方法使用

    {

        [name release];  //销毁对象的时候发送release消息给name

        [super dealloc];

    }

@end






#import <Foundation/Foundation.h>

#import "Person.h"

@interface Student : Person

{

@private    //访问限定

    float math;       //数学科目的成绩

    float english;    //英语科目的成绩

    NSMutableArray *  courses;     //NSMutableArray可变数组的使用

    

}

@property float math;  //属性的使用

@property float english;


-(id)initWithProperty:(NSString *)aName age:(int)aAge math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;

-(NSMutableArray *)getCourses;

-(void) courses:(NSMutableArray *) array;

-(void) print;//继承与多态  重写

@end





#import "Student.h"

@implementation Student

@synthesize math;

@synthesize english;


- (id)init

{

    if (self = [super init])

    {

        name =@"写哈娜";    //成员变量直接赋值

        [self age:20];    //调用父类的方法赋值

        math = 0;

        english = 0;

        courses = nil;

    }

    

    return self;

}


-(id)initWithProperty:(NSString *)aName age:(int) aAge  math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;

{

    if (self  = [super init])

    {

        [aName retain];

        [name release];

        name = aName;

        age =aAge;

        math = aMath;

        english = scoreEnglish;

        courses = array;

    }

    

    return self;

}


-(NSMutableArray *)getCourses{

    return courses;

    

}


-(void) courses:(NSMutableArray *) array{

    [array retain];

    [courses release];

    courses = array;

}


-(void) print{//继承与多态  重写

    NSLog(@"我是学生,我继承了person类,重写了print方法");

    NSLog(@"我的名字是:%@,年龄是:%d\n",name,age);

    NSLog(@"数学成绩%f,英语成绩%f",math,english);

    NSEnumerator *enumerator = [courses objectEnumerator];

    id obj;

    while(obj = [enumerator nextObject]){

        NSLog(@"%@\n",[obj description]); //嵌套使用C和使用 枚举类 NSEnumerator

    }

}


-(void) dealloc

{

    [name release];

    [courses release];  //销毁对象的时候发送release消息给NSMutableArray

    [super dealloc];

}

@end



Student+privateSay.h


#import "Student.h"


@interface Student (privateSay)

  -(void) privateSay;

@end


#import "Student+privateSay.h"


@implementation Student (privateSay)

    -(void) privateSay{

        NSLog(@"这是学生的类别方法");

    }

@end




#import <Foundation/Foundation.h>


//协议一

@protocol sayPrint<NSObject>

@optional

-(void) sayHello;

@required

-(void) sayPrint;

@end


//协议二

@protocol sayPrint2<NSObject>

@optional

-(void) sayHello2;

@required

-(void) sayPrint2;

@end




Teacher.h


#import "Person.h"

#import "sayPrint.h"

@interface Teacher : Person<sayPrint,sayPrint2> {//实现协议

    NSString * number;

}

    @property(retain) NSString * number;  //属性的使用

    -(id)initWithNumber:(NSString*)aNumber;

   

@end





#import "Teacher.h"

@implementation Teacher 

    @synthesize number = number; //属性的一些定义


    - (id)init

    {

        if (self = [super init])

        {

            number = nil;

        }

        

        return self;

    }



    -(id)initWithNumber:(NSString*)aNumber{

        if (self = [super init])

        {

            [aNumber retain];

            [number release];

            number = aNumber;

        }

        return self;

    }


//实现协议sayPrint中的必须方法

    -(void) sayPrint{

        NSLog(@"开始上课");

    }


//实现协议sayPrint2中的必须方法

    -(void) sayPrint2{

        NSLog(@"又一次开始上课");

    }


@end





#import <Foundation/Foundation.h>

@class Student//@class 实现复合关系 引入类名

@class Teacher;

@interface TeacherService : NSObject

-(void) do;

@end





teacherService.m

#import "TeacherService.h"

#import "Teacher.h"

#import "Student.h"

@implementation TeacherService

-(void) do{

    Teacher *teacher = [[Teacher alloc] initWithNumber:@"202"];

    [teacher sayPrint];

    

    

    Student *stu=[[Student alloc] init];

    stu.math=90;          //属性的打点使用

    stu.english = 91;

    NSMutableArray *mutable = [[NSMutableArray alloc] initWithObjects:@"数学",@"英语",@"物理",nil]; //nil的使用

    [stu courses:mutable];

    [stu print];

    [stu initWithProperty:@"ddd" age:20 math:70 english:90 courseArray:mutable];

    [stu print];

    

    [mutable release];

    [stu release];

    

    

    [teacher release];

    

    

}

@end





#import <Foundation/Foundation.h>

#import "TeacherService.h"

int main(int argc, const char * argv[])

{


//    @autoreleasepool {

//        

//        // insert code here...

//        NSLog(@"Hello, World!");

//        

//    }

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  //自动释放池使用

    TeacherService * service = [[TeacherService alloc]init];

    [service do];


    [service release];  //手动释放内存

    [pool release];

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值