GeekBand Objective-C 继承、多态

面对对象的三个基本特征:
封装 encapsulation
继承 inheritance
多态 polymorphism

1.继承

含义:复用父类的成员。类型抽象:将子类当作父类来使用(is-a)。

OC中只支持单继承,而且必需要有一个父类。如果没有指定的父类,可以指定NSObject(所有类的基类)。

继承的成员:

实例变量

shape->_data = 20; //子类调用父类的实例变量用"->"

属性
实例方法
类方法

技巧:默认实例变量只能在实现类内中访问,但如果外部要访问的话。可在接口头文件中将实例变量指定为@public。

@interface Shape : NSObject {
        @public int _data;
}

2.多态 (运行时多态)

override 重写父类的方法,重写就是跟父类方法名参数名相同的方法。
OC本身不支持方法的重载。

super 代表基类,子类中调用基类的方法。
self 代表当前对象,具有多态性。

//父类的引用指向子类的对象
Shape *rect = [[Rectangle alloc] init];
void process(Shape* shape){
      shape.no++;
      [shape draw]; //多态调用
}

子类自动继承父类的初始化器,也可重写父类的初始化器,但必须手动调用父类的初始化器。
子类继承父类的析构器,也可重写父类的析构器方法,子类的析构器执行完,会调用父类的析构器(后置调用)。析构器是具有多态性的。

注意:避免在父类的init和delloc方法中调用子类重写的方法。父类执行init方法的时候,调用子类重写的方法,而这个方法用到的属性还没来得及初始化。父类执行delloc方法的时候调用子类重写的方法,这时子类已经被销毁了。

你可能感兴趣的:(GeekBand Objective-C 继承、多态)