06-01、面向对象的三大特性:封装的基本概念

06-01、面向对象的三大特性:封装的基本概念_第1张图片
屏幕快照 2017-09-18 13.26.27.png
06-01、面向对象的三大特性:封装的基本概念_第2张图片
屏幕快照 2017-09-18 14.48.02.png
06-01、面向对象的三大特性:封装的基本概念_第3张图片
屏幕快照 2017-09-18 14.49.01.png
main.m
#import 
#import "Gun.h"

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

// 1.创建一把枪
Gun *gun = [Gun new];
// 2.设置枪的子弹数量
//    gun->_bullet = 100;
// 引发这个问题的原因: 因为成员变量是public, 给成员变量赋值的时, 赋值的值不受我们的约束
//    gun->_bullet = -100;

[gun addBullet:100];

// 3.射击
[gun shoot];

// 4.查看子弹的剩余数据(获取成员变量的值)
//    NSLog(@"bullet = %i", gun->_bullet);
NSLog(@"BULLET = %i", [gun getBullet]);


return 0;
}
Gun.h
#import 

@interface Gun : NSObject
{
//    @public
int _bullet; // 子弹
// 虽然成员变量不是public之后外界不能直接访问了, 但是还是可以在本类的对象方法中直接访问
}

/**
 *  射击方法
 */
- (void)shoot;


// 提供一个方法用于设置成员变量的值
- (void)addBullet:(int)count;

// 提供一个方法用于返回成员变量的值
- (int)getBullet;
@end
Gun.m
#import "Gun.h"

@implementation Gun

- (void)shoot
{
if (_bullet > 0) {
    
    _bullet--;
    NSLog(@"打了一枪 , 还剩%i颗子弹", _bullet);
}else{
    NSLog(@"没有子弹了");
}
}

// addBullet就是对成员变量的封装
- (void)addBullet:(int)count // -100
{
/*
 封装: 屏蔽内部实现的细节, 仅仅对外提供共有的方法/接口
 好处: 保证数据的安全性
       将变化隔离
 规范: 一般情况下不会对外直接暴露成员变量, 都会提供一些共有的方法进行赋值
       成员变量都需要封装起来
 */
// 对传入的数据进行过滤
if (count < 0) {
    count = 0;
}
_bullet = count;
}

- (int)getBullet
{
return _bullet;
}
@end

你可能感兴趣的:(06-01、面向对象的三大特性:封装的基本概念)