mian.m
//
// main.m
// 封装概念
// 屏蔽内部实现的细节,仅仅对外提供方法和接口
// 保证数据的安全性,将变化隔离
// 一般情况下,不会对外暴露对象的成员变量,即成员变量都需要封装起来
#import <Foundation/Foundation.h>
#import "Gun.h"
int main(int argc, const char * argv[]) {
Gun * gun = [Gun new];
[gun setBullet:10];
[gun shoot];
NSLog(@"剩下%i个子弹",[gun bullet]);
return 0;
}
#import <Foundation/Foundation.h>
@interface Gun : NSObject
{
//@public
int _bullet;
//虽然成员变量不是@public之后就不能直接访问了,但还可以通过调用对象方法的方式访问
}
-(void)shoot;
//提供一个对象方法,来修改对象的属性值,对成员变量进行封装
//getter setter方法是程序员之间的规范,对成员变量的操作都是通过这两个方法来实现
//setter方法还可以监听属性的变化
-(void)setBullet:(int)bullet;
-(int)bullet;
@end
Gun.m
#import "Gun.h"
@implementation Gun
-(void)shoot{
_bullet--;
NSLog(@"打了一枪,还剩%i个子弹",_bullet);
}
-(void)setBullet:(int)bullet{
//给受保护的对象属性赋值,并对值进行控制
if(bullet<=0){
NSLog(@"子弹数不能小于一");
bullet = 0;
}
//成员变量一般加_的原因,避免在set方法中分辨不出那个是参数,那个是成员变量
_bullet = bullet;
}
-(int)bullet{
return _bullet;
}
@end