OC---三大特性

三大特性

-----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------



一、封装
    1.由于@public的成员可以被随意赋值,所以很多时候被赋予的值是无效的,于是我们使用set方法和get方法来管理成员的访问。
    2.set
    作用:用来设置成员变量,可以在方法过滤掉一些不合理的值
    命名规范:方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
              形参名称不要跟成员变量同名 
              一定会接收一个参数,而且参数类型和成员变量类型一致
              返回值 一定是void
    3、get
    作用:返回对象内部的成员变量
    命名规范: get方法的名称一般就跟成员变量同名
               肯定返回值,返回值类型和成员变量类型一致
               不需要接收任何参数
    4、实例:
    @interface Student : NSObject
    { 
        int _age ;
        int _cgrade;
    }
    - (void)setCgrade :(int)newCgrade;//接收
    -(int)cgrade;//输出
    @end
    @implementation Student
     - (void)setCgrade :(int)newCgrade{
        _cgrade = newCgrade;  //将给的值赋值给对象;
    }
    -(int)cgrade{
        return _cgrade; //执行cgrade命令输出对象的值;
    }
    @end
    int main ()
    { 
       Student *st = [Student new];
       [st setCgrade :98]; //执行输入语句;  
       NSLog(@"%d",[st cgrade];//执行输出语句;
       return 0;
    }
    5.封装的好处
      1)过滤不合理的值
      2)屏蔽内部的赋值过程
      3)让外界不必关注内部的细节
二、类方法
 1.对象方法类方法比较 
     对象方法:
     1)以减号-开头
     2)只能让对象调用,没有对象,这个方法根本不可能被执行
     3)对象方法能访问实例变量
     类方法
     1)以加号+开头
     2)只能用类名调用,对象不能调用
     3)类方法中不能访问实例变量
使用场合:当不需要访问成员变量的时候,尽量用类方法 
          类方法和对象方法可以同名
三、self关键字
  问题: 当成员变量和局部变量同名时,采取就近原则,访问的是局部变量
    如;  我成员变量的值为20;
             - (void)test{
               int _age = 10;
               NSLog(@"%d",_age);
          }
          这时成员变量的值为10;所以我们要用self来解决问题;
    self访问成员变量,区分同名的局部变量
    谁调用了这个方法,那么self就指向谁
    于是改成:
           - (void)test{
               int _age = 10;
               NSLog(@"%d",self_age);
          }
          此时输出为:20;
    注意:出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数里
             使用 "self->成员变量名" 访问当前方法调用的成员变量
             使用 "[self 方法名];" 来调用方法(对象方法\类方法)  
    错误: 低级错误:用self去调用函数
              类方法中用self调用类方法,对象方法中用self调用对象方法
              self死循环
四、继承性
 1.定义    
   cat类:
   @interface  Cat :NSObject
   {
       int _weigt;
   }  
   -(void)setWeight:(int)newWeight;
   -(int)weight;
   @end
   @implementation Cat
   -(void)setWeight:(int)newWeight{
        _weight = newWeight;
   }
   -(int)weight{
        return _weight;
   }
   @end
   Dog类:
   @interface  Dog :NSObject
   {
       int _weigt;
   }  
   -(void)setWeight:(int)newWeight;
   -(int)weight;
   @end
   @implementation Dog
   -(void)setWeight:(int)newWeight{
        _weight = newWeight;
   }
   -(int)weight{
        return _weight;
   }
   @end
   Cat和Dog拥有相同属性和行为所以我们可以抽取出来;
    Animal类:
   @interface  Animal :NSObject
   {
       int _weigt;
   }  
   -(void)setWeight:(int)newWeight;
   -(int)weight;
   @end
   @implementationAnimal
   -(void)setWeight:(int)newWeight{
        _weight = newWeight;
   }
   -(int)weight{
        return _weight;
   }
   @end
   再重新定义Cat和Dog
   @interface Cat : Animal
   @end
   @implementation Cat
   @end
   
   @interface Dog : Animal
   @end
   @implementationDog
   @end
2、使用方法
   类B :类A
   我们就讲A是B的父类,B是A的子类
    子类方法和属性的访问过程:如果子类没有,就去访问父类的
    子类和父类不能有相同的成员变量
3、专业术语
    超类(superclass)是你所继承的类
    父类(parentclass)是超类的另一种表达方式
    子类(subclass)是实施继承的类
    孩子类(childclass)是子类的另一种表达方式
4、继承的好处
    消除重复内容,提高效率

    建立了类与类之间的联系

五、多态性

1、多态的基本概念

   某一类事物的多种形态

   OC对象具有多态性

2、多态的体现

    Person *p = [Student new];

    p->age = 100;

    [p walk];

    子类对象赋值给父类指针

    父类指针访问对应的属性和方法

3、多态的好处 

   用父类接收参数,节省代码

4,多态的局限性

   不能访问子类的其他属性


  ----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------











































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值