OC基础——面向对象(封装、继承、多态)

封装

     定义:将类的属性和方法隐藏起来,将其私有化,通过一个公共的方法来间接的访问 ,就叫封装
     作用:过滤数据,保证数据的正确性,增强了代码的健壮性

     操作方式  只读(只有get方法)   可读可写(有get,set方法)   只写(只有set方法)

     组合:

     定义:当一个对象作为另一个对象的成员变量的时候,他们的关系就叫组合模式
     用处:当一个对象在另一个类的很多个方法当中都在使用的时候。
     作用:因为成员变量对于整个类都是全局的,除了在类方法当中不能使用,都可以使用,所以组合模式可以节省代码,优化程序
     场景:两个对象的关系可以用谁拥有谁来表述,那后面的就作为前面的成员变量
     缺点:依赖性太高
     使用的方式:谁属于谁,前面的就是后面的成员变量,两个类就是组合关系

     快速生成代码

      设置代码快速生成的方法:
      通过设置代码块   修改的方式 :< # 统称 # >

继承 

     定义:当A类继承了B类,A类就拥有了B类的所有属性和方法, NSObject类是所有类的父类(基类、超类),自己没有父类
     好处:节省了代码
          一个子类只能有一个直接的父类,其他的都是间接继承
          一个父类可以有很多个直接的子类
          继承使两个类发声了关系(继承关系),实现多态的前提是两个类有继承关系
          增加了代码的重用性
          增加了安全性  
     坏处:依赖性太强(耦合性)
     注意:子类可以重写父类的方法,子类不能重写父类的成员变量
     场景:如果两个类之间可以用A类是B类来描述,两个类之间就可以用继承
     苹果手机是手机,所以Iphone类与Phone之间可以用继承来表示
     与组合的比较:如果说A类属于B类来描述,两个类就可以用组合模式来表述。

     执行顺序:先到自己的方法列表中找方法,有就停止查找,没有,就到自己的父类继续查找,没有再到爷爷类,依次,一直到NSObject类,停止。如果还没有,就没有找到

super关键字:

     代表父类的对象或类名
     作用:在子类当中调用父类的方法

    注意

     如果在子类当中有与父类当中同名的方法,会先调用子类的方法
     把子类当中与父类重名的方法,叫做对父类方法的重写
     在子类当中与父类当中同名的方法中有自己的特有功能的时候,为了实现我自己的功能 ,就必须重写父类的方法。
     super 代表的时当前类的父类的类名或对象,在子类当中调用父类的方法

description

     打印的时候有%@,程序就会自动调用description方法
     作用:当一个对象有很多个属性,需要将他们进行打印的时候,就可以重写description方法

     当你的类里面有很多的属性,你需要将所有的属性全部打印出来的时候,就重写父类的description方法

多态:一种事物的多种形态

     多态:一种事物的多种形态
     表现:父类的指针指向了子类的对象
     好处:增加了代码的扩展性,节省了代码
     前提:两个类必须有及继承关系。
     多态实现的特点:在运行阶段才动态识别对象的类型(动态绑定)
     局限:想让父类的对象调用子类的私有方法,将父类对象的类型进行强制转化

     狗 = 动物 = 生物      人 = 高级动物 = 动物    猪 = 动物= 生物    

//    Dog *dog1 = [Dog new];
//    [dog1 eat];
//    
//   Cat *cat1 = [Cat new];    
//   [cat1 eat];
     整个程序的执行分成三部分:1.预处理:(宏) 2.编译 3.运行
     Animal *animal1 = [Dog new];
     在程序执行到运行阶段,才真正的识别执行方法的对象类型。(动态绑定)
     [animal1 eat];
     Animal *animal4 = [Dog new];
     这是xcode的升级后的特点,所以当Animal类里面没有eat方法的时候,不能这样调用
      [animal4 eat];
      如果想让父类的对象调用子类的私有方法,要将父类对象的类型强制转化为子类的类型
     Dog *dog3 = (Dog *)animal4;
     [dog3 eat];

你可能感兴趣的:(Objective-C,objective-c)