OC语言自学《九》---- OC(面向对象)

被刻印的时光 ゝ 提交于 2020-05-02 07:36:21

定义类和创建对象

  • 创建类
    • 使用@interface 关键字创建类,并且使类继承NSObject
  • @interface负责声明、@implementation负责实现

函数和方法的区别

  • 方法
    • 必须以减号或加号开头
    • 减号开头的是对象方法,加号开头的是类方法
    • 实现必须写在@implementation和@end之间
    • 声明必须写在@interface和@end之间
    • 必须由对象调用
    • 归类、对象所有
  • 函数
    • 函数调用不依赖对象
    • 函数内部不能直接通过成员变量名访问对象的成员变量
    • 可以写在文件的任何地方,但不能写在@interface中
    • 可以写在@implementation和@end之间,也可以被方法调用

对象方法与类方法的区别

  • 对象方法
    • 减号开头
    • 只能由对象调用
    • 实例变量不能在类方法中访问
    • 对象方法可以调用类方法
  • 类方法
    • 加号开头
    • 只能由类来调用
    • 应用场合:当方法内部不需要使用成员变量时,就可以改为使用类方法

self关键字

  • self是指针类型
  • 它指向了方法调用者,谁调用了这个方法就指向谁
  • 用途:
    • 可以利用 self -> 成员变量名 访问当前对象内部的成员变量
    • [self 方法名]可以调用其他对象方法、类方法,取决于self在什么环境中
    • self出现在对象方法中,self就代表对象
    • self出现在类方法中,self就代表类
  • 要避免自己调用自己的方法而发生死循环,例如有个test方法
    • [self test];    //死循环
  • 避免在类方法中使用self调用对象方法

super关键字

  • super的作用
    • 直接调用父类中的某个方法
    • super处在对象方法中,name就会调用父类的对象方法
    • super处在类方法中,那么就会调用父类的类方法
  • super的使用场合
    • 子类重写父类的方法时,想保留父类的一些行为(方法)

常见错误

  • @end不能嵌套
  • 方法的声明不能写在@implementation里面
  • 方法的实现不能写在@interface里面
  • @interface是配对出现的,中间不能嵌套任何东西
  • 成员变量不允许在@interface里面进行初始化
  • 不能随便把成员变量当成C语言中的变量
  • 不能用static修饰成员变量和方法
  • 类的声明要放在创建对象前面

面向对象的三大特性

  • 封装

    • 设置setter方法
    • 设置getter方法
    • 成员变量要与getter和setter方法参数变量区别开来,成员变量要与_下划线开头
    • OC是弱语言,所以只写实现不写声明,方法照样可以运行,但是不推荐这么使用

  • 继承

    • 所有类的根类都是NSObject
    • 继承使用冒号:符号表示,冒号左边是子类,右边是父类(SuperClass)超类
    • 继承的好处
      • 抽取重复的代码
      • 建立了类之间的关系
      • 子类可以拥有父类中所有成员变量和方法
    • 继承的坏处
      • 产生依赖,耦合度高
      • 修改一处容易牵扯多处
    • 使用注意
      • 父类的类声明必须写在子类的声明前面,实现可以写在后面
      • 重写:子类重新实现父类中的某个方法,并覆盖父类方法
      • 子类不能和父类拥有相同的成员变量
      • new方法是在NSObject中定义的类方法
      • NSObject是基类
    • 继承使用的场合
      • 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
      • 当A类拥有B类的部分属性和方法时,可以考虑让B类继承A类
    • 组合
      • 当A类不是B类的子类,但是又要使用B类,可以考虑组合,将B类型声明为成员变量在A中

  • 多态

    • 没有继承就没有多态
    • 代码的体现:父类类型的指针指向子类对象,例如:
      • Person *p = [Student new];    //此时p指向子类Student的实例
    • 多态的好处
      • 如果函数、方法参数中使用时是父类型,可以传入父类、子类对象
    • 多态的局限
      • 父类类型的变量不能直接调用子类特有的方法
      • 父类只能调用父类和子类都有的方法,但是通过强制转换为子类型,就可以调用
    • 使用注意
      • 不能将子类类型转换为父类类型

NSString字符串类型

  • OC中使用%@控制符号输出NSSString字符串内容到屏幕上
    • 示例:创建一个字符串
    • NSString *str = @“luoguankun”;
  • length方法
    • 获取字符串的长度
    • 返回unisgned long
  • stringWithFormat
    • 动态创建字符串,根据传入的值
    • 返回NSString
    • 示例:
NSString *newstr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@“,age,no,name];




标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!