黑马程序员---学习笔记20:OC基础(7)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


多态的概念:
不同的对象以自己的方式相应父类同名的方法

体现出来:
父类的指针指向子类的对象(不只是父类,其实父父类也可以这样)
Animal *p=[Dog new];
Animal *p=[Cat new];

多态的条件:
1) 有继承关系
2) 有方法的重写(子类把父类的方法重写了)

多态的原理:
动态绑定:只到执行的时候才知道变量是什么类型

多态的使用注意:
1) 父类调用子类新增的方法
Animal *a5=[Dog new];//此时a5是Animal类型的,还不能调用Dog类的新增方法
[(Dog *) a5 eat];//此时把a5强制类型转换成Dog类之后就可以了
错误用法:
Animal *a6=[Animal new];//此时a6是Animal类型的,生成的对象也是Animal类型的,该类型中没有eat方法,即使强转也不能使用
[(Dog *) a6 eat];
类的本质:
Person *p =[Person new];
其中p是一个实例对象,是Person类型的
Person是一个类对象,是Class类型的

类对象的获取方法:
类对象属于Class类型(Class是一个结构体指针,所以Class类型的变量就不需要加*了)
1,可以通过实例对象来获取
Class c1=【d class】

2,通过类名获取类对象
Class c2=[Dog class]

用类名可以做哪些事情?
创建对象
【Dog new】
调用类方法
[Dog test]

Class c2=[Dog class];//这里c2等同于Dog
C2* d2=[c2 new];
SEL类型
全称selector,表示方法的存储位置
SEL其实是对方法的包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,找到方法地址后就可以调用方法。这些都是运行时的特性,发送消息,其实就是发送SEL,根据SEL找到地址,调用方法。

SEL s1 = @selector(test);//手动把test包装成selector类型
[p performSelector:s1];//p发送了一条SEL消息
以上两句等于[p test];

点语法:Xcode的特性,Xcode 帮我们做的代码替换。
对象。属性名
注意,此时(p.age)并不是 直接访问实例变量,而是Xcode看到点语法(p.age),会帮我们自动替换p.age=18;替换[p setAge:18];

Int a = p.age;//注意,此时p.age出现在等号的右侧 ,在这种条件下,Xcode看到后会帮我们把p.age替换成[p age];

点语法注意:
点语法的本质是方法调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成set和get方法,如果没有set和get方法则不能使用点语法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值