OC 多态的运行 学习笔记

多态的概念

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

 体现:

 父类指针指向子类对象

 多态的条件

 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值