Objective-C第二章类与对象二

你好!我是小柒,今天咱们来学习一下自定义初始化,便利构造器,设置器与访问器。

类与对象二

 本节内容:

1、self和super关键字

2、自定义初始化

3、便利构造器

4、自定义初始化与便利构造器连用

5、设置器于访问器

 

一、self和super关键字

      1、self是类对象本身,用来调用本类对象方法。

      2、super是父类对象本身,用来调用从父类继承下来的方法。

 二、自定义初始化

小柒什么是自定义初始化?

答:自定义初始化:在初始化的同时给成员变量赋值。

讲解:

//Student.h声明文件

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

{

//    成员变量

    NSString *name;

}

//自定义初始化方法声明

//-(类名 *)initWith成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName;

 

-(void)sayHi;

@end

 

//  Student.m实现文件

#import "Student.h"

 

@implementation Student

//自定义初始化方法实现

//-(类名 *)initWith成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName

{

//    通过super父类调用init初始化方法,产生一个对象,self就是这个类的对象

    

//    self对象本身 = [super父类本身 init初始化];

    self = [super init];

//    判断是否初始化成功,未初始化之前,self = nil

    if (self) {

//      给成员变量赋值

//      成员变量 = 参数名;

        name = newName;

    }

//  将初始化后的对象返回self;

    return self;

}

//描述方法description

//-实例方法(NSString *)方法名

- (NSString *)description

{

//  返回一个成员变量

    return name;

}

-(void)sayHi

{

    NSLog(@"叫我:%@就行",name);

}

 

@end

 

//  main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

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

    @autoreleasepool {

//        自定义初始化方法调用

//  类名 *stu = [[类名 alloc] initWith成员变量名:值];

        Student  *stu = [[Student alloc] initWithName:@"齐哥"];

//        当我们打印一个对象时,默认调用其描述方法

        NSLog(@"stu = %@",stu);        

        [stu sayHi];   

    }

    return 0;

}

打印结果:

2015-12-29 14:03:04.258 Task[5598:118021] stu = 齐哥

2015-12-29 14:03:04.259 Task[5598:118021] 叫我:齐哥就行

 小柒提示:自定义初始化格式一定要背下来,init小写With首字母大写,成员变量名首字母大写,参数名驼峰法。

 

3、便利构造器

小柒什么是便利构造器?

答: 通过类方式实现对象的初始化以及成员变量的赋值。

//Student.h生明文件

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

{

//  成员变量

//    姓名

    NSString *name;  

}

//便利构造器方法声明

//+(类名 *)类名小写With成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName;

@end

 

//  Student.m实现

#import "Student.h"

 @implementation Student

//便利构造器方法实现

//+(类名 *)类名小写With成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName

{

//    创建对象

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

//    赋值

    stu ->name = newName;

    NSLog(@"stu ->name = %@",stu ->name);

//    返回对象

    return stu;

}

//描述方法

-(NSString *)description

{

    return name;

}

@end

 

//  main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

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

    @autoreleasepool {

        Student *stu = [Student studentWithName:@"齐哥"];

//        描述对象

        NSLog(@"stu = %@",stu);

    }

    return 0;

}

打印结果:

2015-12-29 16:52:58.571 Task2[1558:26150] stu ->name = 齐哥

2015-12-29 16:52:58.572 Task2[1558:26150] stu = 齐哥

小柒提示:便利构造器格式一定要背下来,类名小写With首字母大写,成员变量名首字母大写,参数名驼峰法。

 

四、自定义初始化与便利构造器连用

//  Student.h声明

#import <Foundation/Foundation.h>

 @interface Student : NSObject

{

//    成员变量

    NSString *name;

    int age;

}

//自定义初始化方法声明

//-(类名 *)initWith成员变量名:(类型)参数名 and成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge;

//+(类名 *)类名With成员变量名:(类型)参数名 and成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName andAge:(int)newAge;

-(void)play;

@end

 

//  Student.m实现

#import "Student.h"

@implementation Student

//自定义方法实现

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge

{

    self = [super init];

    if (self) {

        name = newName;

        age = newAge;

    }

    return self;

}

//便利构造器方法实现

+(Student *)studentWithName:(NSString *)newName andAge:(int)newAge

{

//    类名 *对象名 = [[类名 alloc] initnitWithName:参数名 andAge:参数名];

    Student *stu = [[Student alloc] initWithName:newName andAge:newAge];

//    返回对象

    return stu;

}

-(void)play

{

    NSLog(@"叫我%@,哥今年%d",name,age);

}

@end

 

//  main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

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

    @autoreleasepool {

        Student *stu = [[Student alloc] initWithName:@"齐哥" andAge:10];

        

        [stu play];

        Student *stu2 = [[Student alloc] initWithName:@"老三" andAge:9];

//        调用

        [stu2 play];

    }

    return 0;

}

打印结果:

2015-12-29 16:58:26.712 Task3[1668:29371] 叫我齐哥,哥今年10

2015-12-29 16:58:26.714 Task3[1668:29371] 叫我老三,哥今年9

 

 5、设置器与访问器

 小柒什么是设置器?什么是访问器?

答:设置器全称setter,设置、修改对象中某个成员变量的值。

答:访问器全称getter访问对象中某个成员变量的值。 

      且setter,getter是成对出现。

//Student.h声明文件

#import <Foundation/Foundation.h>

 @interface Student : NSObject

{

//    成员变量

    NSString *name;

    int age;

}

//设置器方法声明

//-方法类型(返回类型)set成员变量名:(类型)参数名;

-(void)setName:(NSString *)newName;

//-方法类型(类型)参数名;

-(NSString *)Newname;

-(void)setAge:(int)newAge;

-(int)newAge;

//

-(void)play;

@end

 

//Student.m实现文件

#import "Student.h"

 @implementation Student

//设置器方法实现

//-方法类型(返回类型)set成员变量名:(类型)参数名

-(void)setName:(NSString *)newName

{

//    赋值

    name = newName;

}

-(NSString *)Newname

{

//    返回成员变量

    return name;

}

-(void)setAge:(int)newAge

{

    age = newAge;

}

-(int)newAge

{

    return age;

}

-(void)play

{

    NSLog(@"我是住在你隔壁的%@,我才%d,请你放心!",name,age);

}

@end

 

//  main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

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

    @autoreleasepool {

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

//      [对象 set成员变量名:];

        [stu setName:@"老王"];

//        [stu setAge:30];等效于stu.age = 30;

//      点语法

//      对象.成员变量 ;

        stu.age = 30;

        [stu play];

    

    }

    return 0;

}

 打印结果:

2015-12-29 19:18:27.579 Task4[2612:58816] 我是住在你隔壁的老王,我才30,请你放心!

小柒提示:点语法只能调用set和get方法。

哎呀!今天的课程又讲完了,大家好好敲代码,记得预习封装和继承,小柒也觉觉了,拜拜。加油哦!

 

posted on 2015-12-29 12:56  xxQMYxx  阅读(135)  评论(0编辑  收藏  举报

导航