函数的重载:函数方法的函数名相同,参数的列表不同(列表包括:参数的个数和参数的类型),函数返回值可相同可不同。函数的重载适用于同一个类中的不同函数,也适用于父类和子类中的函数
函数的重写:重写是相对于父类和子类之间的,函数的重写指的是子类不想继承使用父类中的函数方法所实现的内容,所以重写同一个函数方法的实现来对函数进行内部实现的函数覆盖,又称为函数覆盖;即:函数名相同,参数列表一致(参数的个数和类型一致),函数的返回值一致。
函数的重写中提到的继承使用 - 这个继承是OC面向对象的三大特性之一。
OC面向对象的三大特性:封装;继承;多态
封装:可以理解为函数方法的外露 - 在类的两个文件中(.h 和 .m)的 .h 中进行方法的声明 .h 的内容相当于public 方法 是外露在外面的供使用者调取使用的,方法可以被外部使用;而方法的实现放在 .m 中, .m 相当于Private 私有的 不能够被外界看到和使用的
继承: 我们所说的子类和父类就是一种继承关系(子类又称为“派生类” 父类又称为“基类”或者“超类”)(平时我们在创建新的控制器时总会选择UIViewController为父类,我们自己命名的控制器名为子类),子类继承了父类所有的内容,同时能够在子类中进行其他的不同于父类中的方法创建等操作,这些操作不会对父类产生影响;而父类中函数方法的变化,子类中会发生相同的变化。(简单来说就是 - 父类变化影响子类,子类变化不影响父类)
多态:多态的理解就是在继承的基础上(即父类和子类这种关系上)一个父类下面可以有多个子类继承自这个父类 然后对父类中同一个函数方法进行函数的重写,讲函数内部的实现进行改变;然后父类的指针可以指向子类对象,进而能够调用不同子类内部重写过的函数方法,以达到实现不同内容的展现效果。(例如:继承自UIView的两个子类ViewA和ViewB,相同的初始化方法,但是内部A里创建了一个按钮button;而B里创建了一个Label,然后父类的UIView可以通过,UIView *a =[ [ViewA alloc]init],UIView *b =[ [ViewB alloc]init]; 父类指针指向子类的对象,从而能够通过初始化获取到不同的展示效果
看过了继承和重写之后,可能对继承和重写的定义有些许的疑问 - 重写是对于函数来说的,是对函数方法内部实现的一种重新实现;而继承是对于类来说的,父类和子类,子类继承了父类。子类内部继承了父类的函数方法,子类内部对函数方法实现的修改,是函数的重写
属性:声明一个属性,系统会默认分配读取函数(set,get方法),可以通过点运算符来调用存取方法,并且会产生一个以_开头的成员变量
成员变量:声明一个成员变量,系统不会分配读取函数,不会产生连带的存取的方法
属性和成员变量的不同点在于:属性可以通过存取函数被外部调用,而成员变量不能够被外部调用,只有设置为public才可被外部调用
类别:类别分为category和extension,实现了对类的扩展 - category可以在不了解源码的情况下,对类的方法进行扩展,可以对该类增加新的方法,但是不能增加或改变该类的属性 ; 而extension是category的一种匿名 就能够改变类的方法 也能够改变类的属性
类别和继承的异同点:同 - 都实现了对类的扩展 不同 - 类别是相对于该类(该类可以是父类,可以是子类)来说的,改变了该类的方法;而继承是仅限于对子类来说的,改变了子类的内容,仅对子类起作用,而对于父类来说,没有变化