OC自学的第二天

OC类的三大特性:


  • 封装
  • 继承
  • 多态

目录

1. 封装

  • set方法
    • 作用:
      提供一个方法给外界设置成员变量值 ,可以在方法里面对参数进行过滤
    • 命名规范:
      1>方法名必须以set开头
      2>set后面的跟上成员变量的名称,成员变量的首字母必须大写
      3>set方法返回值一定时void
      4>一定要接受一个参数,参数类型和成员变量的类型一致
      5>形参的名称不能和成员变量名一样
  • get方法
    • 作用:
      返回对象内部的成员变量
    • 命名规范:
      1>肯定有返回值,返回值类型肯定与成员变量类型一致
      2>方法名和成员变量名一致
      3>不需要接受任何参数
  • 成员变量:

    • 作用:
      1>让成员变量和get方法的名称区分开
      2>可以跟局部变量区分开,一看下划线开头的变量,一般都是成员变量
  • 对象方法命名规范:

    • 减号 - 开头
    • 只能由对象调用
    • 对象方法可以访问当前对象的成员变量(实例变量)
  • 类方法:
    • 命名规范:
      1>加号 + 加号
      2>只能由类(名)来调用
      3>类方法中不能访问成员变量(实例变量)
    • 类方法的好处
      1>不依赖于对象,执行效率高
      2>能用类方法尽量用类方法
    • 场合:
      当刚内部不需要使用成员变量时,就可以改为类方法
    • 可以允许类方法和对象方法同名
  • self:
  • 谁调用了当前方法,self就代表谁
    1·self出现在对象方法中,self就代表对象
    2·self出现在类方法中,self就代表类

  • 可以利用self->成员变量名“访问当前对象内部的成员变量”

  • [self 方法名]可以调用其他对象方法\类方法

    2.继承

  • 继承的好处

    • 抽取重复代码
    • 建立了类之间的关系
    • 子类可以拥有父类中的所有成员变量和方法
  • 注意点:

    • 基本上所有类的根类是NSObject
    • 父类要写在前面
    • 不允许子类和父类拥有相同名称的成员变量
    • 调用某个对象的方法时,优先去当前对象中找,如果找不到就去父类中找
  • 重写:

    • 子类重新实现父类中的某个某个方法,覆盖父类以前的方法
  • 继承的坏处:

    • 代码耦合性太强
  • 继承的使用场合:

    • 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
    • 当A类拥有B类中的部分属性和方法时,就可以考虑让B类继承A类
  • super的作用

    • 直接调用父类中的某个方法
    • super处在对象方法中,那么就会调用父类中对象方法,super处在类方法中,那么就会调用父类中的类方法
    • 使用场合:
      子类重写服父类的方法时想保留父类方法

3. 多态

  • 没有继承就没有多态
  • 代码体现:
    • 父类类型的指针指向子类对象
  • 好处:
    • 如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
  • 局限性
    • 父类类型的变量不能直接调用子类特有的方法.必须强转为子类类型变量后,才能用子类特有的方法

成员变量的作用域

  • @public
    • 在任何地方都能直接访问对象的成员变量
  • @private
    • 只能在当前类的对象方法中访问(@implementation中默认是@private)
    • 虽然不能直接访问但是子类在继承父类的时候还是有私有的成员变量的。可以通过get和set调用
  • @portected
    • 能在当前类和子类的对象方法中直接访问(@interface中默认是@protected)
  • @package
    • 只要处在同一个框架中,就能直接访问对象的成员变量
  • 注意:
    • @implementation也能写成员变量但是成员变量名不能和@interface中一样,但是是私有的,绝对的私有

点语法

  • 为了方便其他语言的使用者能快速学习OC语言,OC语言也提供了点方法

  • OC的点方法和其他语言不同,调用的不是成员变量,而是getter和setter方法

  • 前提:需要有getter和setter
  • 作用范围:只能用在getter和setter中
  • p.age = 10 <===> [p setAge:10]
  • p.age <===> [p age]

只要有赋值的,默认调用的是setter
只是调用的,默认调用的是getter

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页