博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC多态
阅读量:5924 次
发布时间:2019-06-19

本文共 1140 字,大约阅读时间需要 3 分钟。

要点:

1、多种形态,引用的多种形态

对于一个引用变量,可以指向任何类的对象。
对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同。
当通过此引用向对象发送消息,调用的方法是不同的,此时方法的调用就是多态。

2、类与类之间有关系,继承关系
父类的引用可以指向子类的引用或者本类的引用。
父类的引用指向子类的对象,发送消息,调用的是子类对象的方法。
父类的引用指向本类的对象,发送消息,调用本类的方法。

3、编译期类型和运行期类型
*在多态下,父类的引用可以指向子类的引用,当编译的时候,编译器无法确定指向的对象是什么类型,所有编译器会将引用当做父类类型引用编译检查。
*在调用方法时,发现确实是子类对象,为子类类型创建空间。

Animal* animal = [[Dog alloc] init];

编译时,把Dog类型当成Animal类型编译。运行时,调用的是Dog类型的对象。

 

代码分析: A是父类,B继承A,C继承B

A中:

#import 
@interface A : NSObject- (void)show;@end

 

#import "A.h"@implementation A- (void)show{    NSLog(@"A show");}@end

B中:

#import "A.h"@interface B : A- (void)show;@end
#import "B.h"@implementation B- (void)show{    NSLog(@"B show");}@end

C中:

#import "B.h"@interface C : B-(void)show;@end
#import "C.h"@implementation C- (void)show{    NSLog(@"C show");}@end

 

在main.m中

//A类型的指针 指向A类型的对象        A *a = [[A alloc]init];        [a show];                //多态        //父类指针 指向 子类对象        B *b = [[B alloc]init];        //这里b show 是调用哪个方法呢?        [b show];        //动态监测-调用方法时候会监测对象的真实类型                        //C也一样        C *c  = [[C alloc]init];        [c show];

 

输出结果:

A showB showC show

 

转载地址:http://bvavx.baihongyu.com/

你可能感兴趣的文章
RIP基本概念
查看>>
老板让你抗住千万级流量,如何做架构设计?
查看>>
程序员面试,为什么不跟我谈高并发?
查看>>
解决Windows Server 2008 R2无法保存网络发现状态更改问题
查看>>
SQL SELECT INTO 语句
查看>>
我的友情链接
查看>>
Tomcat 系统架构与设计模式
查看>>
JAVA类的生命周期
查看>>
Linux服务器部署系列之七—OpenLDAP篇
查看>>
Python 在Ubuntu下的开发环境搭建
查看>>
沃通WoSign:关于微信公告“iOS11不再信赖WoSign证书”的说明
查看>>
CENTOS客户端加载ISCSI配置方法。
查看>>
11月全球操作系统版本份额混战:XP仅为13.57%
查看>>
10月8日“.我爱你”域名总量:耐思尼克升至十一名
查看>>
12月第3周网络安全报告:发现放马站点域名131个
查看>>
k8s集群之kubernetes-dashboard和kube-dns组件部署安装
查看>>
sed命令使用
查看>>
LAMP架构(Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间)...
查看>>
设置trunk不行需要设置access才可以互通
查看>>
Zimbra 8.7.1GA更新
查看>>