语法基础---面向对象编程的三大特性(2)

一、面向对象封装

    顾名思义,封装就是把相关的属性包装起来,用的时候直接用这个包裹起来的东西就行了,更加接近人类的思考方式,只需要关注对象,不需要关注步骤。还是代码演示把。
1)要理解封装,首先要理解和运用set和get方法,set方法的作用就是用来设置成员变量,可以在方法里面过滤掉一些不合理的值;get方法的作用是放回对象内部的成员变量。
2)实例中来说明。我还是在以前的例子上面进行修改。

#import<Foundation/Foundation.h>
@interface Person : NSObject
{
    int _height;
    int _weight;
    int _face;//颜值
}
//set方法
-(void)setHeight:(int)height;
-(void)setWeight:(int)weight;
-(void)setFace:(int)face;
//get方法
-(int)height;
-(int)weight;
-(int)face;
//-(void)cook;//做饭
//-(void)wash;//洗衣服
@end
@implementation Person
//set方法的实现
-(void)setHeight:(int)height
{
    _height=height;
}
-(void)setWeight:(int)weight
{
    _weight=weight;
}
-(void)setFace:(int)face
{
    _face=face;
}
//get方法的实现
-(int)height
{
    return _height;
}
-(int)weight
{
    return _weight;
}
-(int)face
{
    return _face;
}

//-(void)cook
//{
//    NSLog(@"身高为%i,体重为%i,颜值为%i,做饭",height,weight,face);
//}
//-(void)wash
//{
//    NSLog(@"身高为%i,体重为%i,颜值为%i,洗衣服",height,weight,face);
//}

@end
int main()
{
    Person *Myself =[Person new];
    [Myself setHeight:200];
    [Myself setWeight:150];
    [Myself setFace:300];
    NSLog(@"身高为:%i,体重为:%i,颜值为:%i",[Myself height],[Myself weight],[Myself face]);

    return 0;
}

    在代码中,我将Person类中的属性身高height,体重weight,颜值face用set方法封装好了,到时候调用时就直接用get方法获取就可以了。
3)运行结果
这里写图片描述
从运行结果可以看出封装的内容已经显示出现了。
4)现在再来谈谈封装的好处。
1.可以过滤不合理的值,例如可以在set方法中加入一些判断语句进行筛选。
2.屏蔽内部赋值的过程。
3.让外部不必关注内部的细节。

二、类方法

    到目前为止,在oc中能用的方法是以-开头的。其实还有一种是以+开头的,这种就叫做类方法,类方法可以直接用类名来执行方法(类本身会在内存中占据存储空间,里面有类\对象方法列表)。
1)实例

#import<Foundation/Foundation.h>

    @interface Musician :NSObject
    {
        int _num;
    }
    -(void)playPiano;
    +(void)playPiano;
    -(void)setNum:(int)num;//set get 方法
    -(int)num;
    @end
    @implementation Musician
    -(void)setNum:(int)num
    {
        _num=num;
    }
    -(int)num
    {
    return _num;
    }
    -(void)playPiano
    {
        NSLog(@"%i号钢琴师弹奏钢琴",_num);
        [Musician playPiano];//对象方法可以调用类方法
    }
    +(void)playPiano
    {
        NSLog(@"这是类方法");


    }
    @end


int main()
{
    Musician *m =[Musician new];
    [m setNum:10];
    [m playPiano];//对象方法
    [Musician playPiano];//类方法

    return 0;
}

在这里我定义了一个Musician的类,里面有playPiano的对象方法和类方法,这说明对象方法和类方法名字可以是一样的。并且对象方法可以调用类方法,看运行结果。
2)运行结果
这里写图片描述
图中第一条”这是类方法“是对象调用类方法中得到的。
3)注意的事项
对象方法
1 减号 - 开头
2 只能由对象来调用
3 对象方法中能访问当前对象的成员变量(实例变量)

类方法
1 加号 + 开头
2 只能由类(名)来调用
3 类方法中不能访问成员变量(实例变量)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值