OC 多态的运行 学习笔记

来源:互联网 发布:js回调函数原理 编辑:程序博客网 时间:2024/06/05 06:46

多态的概念

 不同的对象以自己的方法相应父类同名的方法,这就是多态

 体现:

 父类指针指向子类对象

 多态的条件

 1.有继承关系

 2.有方法重写(子类把父类的同名方法重写)


课堂练习的代码

        Animal *ani = [Animal new];//对象爷爷        [ani run];        Dog *d1 = [Dog new];//正常使用,爸爸        [d1 run];        Cat *cat = [Cat new];//正常使用,叔叔        [cat run];                //使用多态是,父类指针指向子类对象        Animal  *a2 = [Dog new];//可以指向子类,也可以指向孙子类,例如声明一个其他的类,是Dog的子类的时候就可以,运行的时候结果是孙子类的方法,这就是多态,都是爷爷类型的指针但是运行的方法却是不同儿子孙子的方法        [a2 run];



多态:当子类的方法和父类的方法不是同名的情况,以上代码是同名的情况(编译器能找到run方法,因为声明的Animal类型里面有run方法).但是当子类有自己独特的方法时候

声明一个多态

例如:Animal *a3 = [Dog new];

这时候回编译错误,eat是Dog 的私有方法。但是这时候a3又是指向Dog类的,所以地址是可以访问过去的,这时候可以这样写

[a3 eat]错误

[(Dog *)a3 eat]; 这样就是正确的了,把a3强制转换成Dog类型,这时候就可以运行eat Dog类的私有方法了



注意编译器找声明类型的.h方法有没有。运行的时候找实际new出来的地址

0 0
原创粉丝点击