Objective-C第二章类与对象二
你好!我是小柒,今天咱们来学习一下自定义初始化,便利构造器,设置器与访问器。
本节内容:
1、self和super关键字
2、自定义初始化
3、便利构造器
4、自定义初始化与便利构造器连用
5、设置器于访问器
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首字母大写,成员变量名首字母大写,参数名驼峰法。
小柒什么是便利构造器?
答: 通过类方式实现对象的初始化以及成员变量的赋值。
//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
小柒什么是设置器?什么是访问器?
答:设置器全称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方法。
哎呀!今天的课程又讲完了,大家好好敲代码,记得预习封装和继承,小柒也觉觉了,拜拜。加油哦!
优质内容筛选与推荐>>