黑马程序员---Objective-C 三大特性--封装

封装

#import

@interface Student : NSObject

{

    int age;

    int no; 

}


set方法

 1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

 2.命名规范:

 1> 方法名必须以set开头

 2> set后面跟上成员变量的名称,成员变量的首字母必须大写

 3> 返回值一定是void

 4> 一定要接收一个参数,而且参数类型跟成员变量类型一致

 5> 形参的名称不能跟成员变量名一样

- (void)setAge:(int)newAge;


 get方法

 1.作用:返回对象内部的成员变量

 2.命名规范:

 1> 肯定有返回值,返回值类型肯定与成员变量类型一致

 2> 方法名跟成员变量名一样

 3> 不需要接收任何参数

 

- (int)age;

- (void)study;

@end

@implementation Student

 

 

set方法的实现

- (void)setAge:(int)newAge

{

    // 对传进来的参数进行过滤

    if (newAge <= 0)

    {

        newAge = 1;

    }

   

    age = newAge;

}

- (int)age

{

    return age;

}

- (void)study

{

    NSLog(@"%d岁的学生在学习", age);

}

@end

 

 

int main()

{

    Student *stu = [Student new];

    [stu setAge:10];

    NSLog(@"学生的年龄是%d", [stu age]);

    return 0;

}

==================================================

封装细节

#import

typedef enum {

    SexMan,

    SexWoman

} Sex;

@interface Student : NSObject

 成员变量的命名规范:一定要以下划线 _ 开头

  作用:

  1.让成员变量和get方法的名称区分开

  2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

 

    int _no;

    Sex _sex;

}

- (void)setSex:(Sex)sex;

- (Sex)sex;

 

- (void)setNo:(int)no;

- (int)no;

@end

 

 

@implementation Student

- (void)setSex:(Sex)sex

{

    _sex = sex;

}

- (Sex)sex

{

    return _sex;

}

- (void)setNo:(int)no

{

    _no = no;

}

- (int)no

{

    return _no;

}

@end

 

 

int main()

{

    Student *stu = [Student new];

   

    [stu setSex:SexMan];

    [stu setNo:10];

   

    [stu sex];

   

    [stu no];

   

    return 0;

}

==================================================

类方法

#import

 

 对象方法

 1> 减号 - 开头

 2> 只能由对象来调用

 3> 对象方法中能访问当前对象的成员变量(实例变量)

 

 类方法

 1> 加号 + 开头

 2> 只能由类(名)来调用

 3> 类方法中不能访问成员变量(实例变量)

 

类方法的好处和使用场合

 1> 不依赖于对象,执行效率高

 2> 能用类方法,尽量用类方法

 3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法

 

 可以允许类方法和对象方法同名

 

@interface Person : NSObject

{

    int age;

}

// 类方法都是以+开头

+ (void)printClassName;

- (void)test;

+ (void)test;

@end

@implementation Person

+ (void)printClassName

{

    // errorinstance variable 'age' accessed in class method

    // 实例变量age不能在类方法中访问

    //NSLog(@"这个类叫做Person-%d", age);

}

- (void)test

{

    NSLog(@"111-%d", age);

   

    //[Person test];

}

+ (void)test

{

    // 会引发死循环

    //[Person test];

   

    NSLog(@"333");

   

    // 会引发死循环

//    /[Person test];

}

@end

 

 

int main()

{

    [Person test];

    return 0;

}

==================================================

self

#import

@interface Person : NSObject

{

    int _age;

}

- (void)setAge:(int)age;

- (int)age;

- (void)test;

@end

@implementation Person

- (void)setAge:(int)age

{

    self->_age = age;

}

- (int)age

{

    return self->_age;

}

- (void)test

{

    int _age = 20;

    NSLog(@"Person的年龄是%d", self->_age);

}

@end

 

 

int main()

{

    Person *p = [Person new];

   

    [p setAge:10];

   

    [p test];

   

    return 0;

}

==================================================

self

 

 self的用途:

 1> 谁调用了当前方法,self就代表谁

 * self出现在对象方法中,self就代表对象

 * self出现在类方法中,self就代表类

 

 2> 在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

 

 2> [self 方法名]可以调用其他对象方法\类方法

 

@interface Dog : NSObject

- (void)bark;

- (void)run;

@end

@implementation Dog

- (void)bark

{

    NSLog(@"汪汪汪");

}

- (void)run

{

    [self bark];

    //NSLog(@"汪汪汪");

    NSLog(@"跑跑跑");

}

@end

int main()

{

    Dog *d = [Dog new];

   

    [d run];

   

    return 0;

}

==================================================

self

 

 设计一个计算器类

 * 求和

 * 求平均值

工具类:基本没有任何成员变量,里面的方法基本都是类方法

@interface JiSusnQi : NSObject

+ (int)sumOfNum1:(int)num1 andNum2:(int)num2;

+ (int)averageOfNum1:(int)num1 andNum2:(int)num2;

@end

 

 

@implementation JiSusnQi

+ (int)sumOfNum1:(int)num1 andNum2:(int)num2

{

    return num1 + num2;

}

+ (int)averageOfNum1:(int)num1 andNum2:(int)num2

{

    // 在这种情况下,self代表类

    int sum = [self sumOfNum1:num1 andNum2:num2];

    return sum / 2;

}

@end

 

 

int main()

{

    int a = [JiSusnQi averageOfNum1:10 andNum2:12];

    NSLog(@"a=%d", a);

    return 0;

}

==================================================

self使用注意

@interface Person : NSObject

- (void)test;

+ (void)test;

- (void)test1;

+ (void)test2;

- (void)haha1;

+ (void)haha2;

@end

@implementation Person

- (void)test

{

    NSLog(@"调用了-test方法");

}

+ (void)test

{

    NSLog(@"调用了+test方法");

}

- (void)test1

{

[self test];

}

+ (void)test2

{

    [self test];

}

- (void)haha1

{

    NSLog(@"haha1-----");

}

void haha3()

{

   

}

+ (void)haha2

{

    [self haha3];

}

@end

int main()

{

    [Person haha2];

    return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值