首页 > 代码库 > OC继承和多态
OC继承和多态
一 :继承
1)类和类之间的关系
2)父类: Animal
3) 子类: Dog Cat
4) 子类继承了父类的属性和方法
子类重写父类的方法的时候不用声明父类的方法,因为父类中已经声明了该方法,子类声明中导入了父类的声明。
继承和组合
继承的适用场合:
(1)当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中。
(2)当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。
继承:###是xxx,如狗是动物,可以让狗继承动物类
组合:###拥有xxx,如学生有书,可以让书这个类作为学生类的属性
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态是,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象。
Person *p = [Person new];
[p cry]; //Person
Man *man = [Man new];
[man cry];//Man
Woman *woman = [Woman new];
[woman cry];//Woman
//动态类型:
//OC中允许在程序执行的时候才去确定对象的类型
//用谁new的就是什么类型
//多态
Person *p1 = [Man new];
[p1 cry];
//定义一个方法,传哪个对象,就是哪个对象的哭的方法
[p cryWithObject:woman];
//p ->person
//(Man*)p ---> Man
Man *m1 = (Man*)p;
// [m1 test]; //错误的用法 父类无法调用子类特有方法
//p1-->man
//
Man *m2 = (Man*)p1;
[m2 test]; //可以调用
好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
OC继承和多态