OC面向对象之-多态
来源:互联网 发布:域名目录反向解析ip 编辑:程序博客网 时间:2024/06/12 04:00
OC面向对象-多态
学了好多编程语言,当被问到面向对象的多态时,我懵逼了。。。。(据说会写设计模式的都懂多态,我的路还很长啊、)
下面是我整理的一些概念。
- 用一个基类的指针指向子类的对象,在函数调用时可以调用到正确版本的函数
- 一个基类的指针当函数的参数,用这个指针可以接受到任何他的子类对象也包括他自己
- 一个基类的指针指向子类的对象
- 在复合类中,尽量引用高层次的类(基类的指针)当做类的成员变量,这样就可以创建出它所对应的任何类对象包括它自己
案例一:
/***父类指针指向子类创建的对象***/#import "Dog.h"#import "Cat.h"int main(int argc, const char * argv[]){ Animal *a = [[Animal alloc] init]; Animal *cat = [[Cat alloc] init]; Animal *dog = [[Dog alloc] init]; [a print]; [cat print]; [dog print]; return 0;}结果: ****类练习****[2134:302819] 我是动物 ****类练习****[2134:302819] Cat ****类练习****[2134:302819] Dog
案例二:
/* 增加代码扩展性 */void printSelf(Animal *a){ //用一个基类的形参,接受来自子类的对象。 [a print];}int main(int argc, const char * argv[]){ Animal *a = [[Animal alloc] init]; Animal *cat = [[Cat alloc] init]; Animal *dog = [[Dog alloc] init]; printSelf(a); printSelf(cat); printSelf(dog); return 0;}结果: ****类练习****[2134:302819] 我是动物 ****类练习****[2134:302819] Cat ****类练习****[2134:302819] Dog
案例三:
在复合类中,尽量引用高层次的类(基类的指针)当做类的成员变量,这样就可以创建出它所对应的任何类对象包括它自己
- .h文件中
/** 猫 */@property (nonatomic , strong)Animal *cat;/** 狗 */@property (nonatomic , strong)Animal *dog;
- .m文件中
-(instancetype)init{ if (self = [super init]) { _cat = [[Cat alloc] init]; } return self; /* if (self = [super init]) { _dog = [[Dog alloc] init]; } return self; */}
多态的局限性
- 父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
Animal *a=[[Dog alloc] init];//在Animal类中没有print方法,这里调用了狗对象的方法。[a print];//解决方法:可以将a强制转换为Dog*类型的变量,如下:Dog *d=(Dog *)a;//使用强制转换,这里a和d指向的是同一个狗对象
以上总结还往大家多多指正、
1 0
- OC面向对象之-多态
- OC之面向对象
- OC之面向对象
- IOS之OC面向对象—多态
- OC面向对象之方法
- OC面向对象之封装
- OC面向对象之继承
- 面向对象OC之继承
- IOS学习之OC面向对象—多态
- OC面向对象—多态
- OC面向对象—多态
- OC面向对象—多态
- OC面向对象—多态
- OC面向对象—多态
- OC面向对象—多态
- 面向对象OC之封装浅谈
- OC之面向对象作业小练
- OC学习心得之面向类和对象
- A + B for you again
- Oracle SQLloader
- iOS软件开发 设置UITextView输入内容位置从左上角开始
- refresh的停车场
- 初识AngularJS
- OC面向对象之-多态
- dubbo-admin如何在zookeeper下面使用
- queue队列容器
- scrollView中contentSize、contentInset和contentOffset知识点回顾
- 不想浪费时间写重复代码(一)
- 手动修改二进制文件,实现在代码区中添加自己的一段代码
- SQLserver概述
- sybase客户端SqlDbx中文乱码问题解决
- Mac OS 下Charles+Chrome Omega配置方法