您的位置:首页 > 职场人生

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

2015-08-20 13:15 357 查看
——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方法则不能使用点语法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: