oc22--多态
//
// Animal.h #import <Foundation/Foundation.h> @interface Animal : NSObject
{
int _age;
} - (void)eat; //.h是变量和方法的声明, .m文件是对方法的实现。
@end
//
// Animal.m
#import "Animal.h" @implementation Animal
- (void)eat
{
NSLog(@"吃东西");
}
@end
//
// Cat.h #import <Foundation/Foundation.h>
#import "Animal.h" @interface Cat : Animal @end
//
// Cat.m #import "Cat.h" @implementation Cat - (void)eat
{
NSLog(@"吃鱼");
}
@end
//
// Dog.h #import <Foundation/Foundation.h>
#import "Animal.h" @interface Dog : Animal - (void)kanJia; //继承,.m文件是自己方法的实现和父类继承过来的方法的实现
@end
//
// Dog.m #import "Dog.h" @implementation Dog - (void)eat
{
NSLog(@"啃骨头");
} - (void)kanJia
{
NSLog(@"看家, 旺旺叫");
}
@end
//
// Person.h #import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h" @interface Person : NSObject /*
+ (void)food:(Dog *)dog; + (void)foodCat:(Cat *)cat; // 骆驼
// 狗熊
// 豹子
// 大象
// 猴子
// 鸡
// 猪
// 草泥马
// ...
*/ + (void)food:(Animal *)a;
@end
//
// Person.m #import "Person.h" @implementation Person
+ (void)food:(Animal *)a
{
[a eat];
}
@end
//
// main.m
// 多态
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
#import "Person.h"
#import "Pig.h" int main(int argc, const char * argv[]) { Dog *d11 = [Dog new];
[d11 eat];//啃骨头 Cat *c1 = [Cat new];
[c1 eat];//吃鱼 // 多态: 事物的多种表现形态
// 动态类型: 在编译的时候编译器只会检查当前类型对应的类中有没有需要调用的方法,所以不会报错,在运行时,系统会自动判断a1的真实类型
Animal *a1 = [Dog new];
[a1 eat];//啃骨头 // 注意点: 在多态中, 如果想调用子类特有的方法必须强制类型转换为子类才能调用,[a1 kanJia];
Dog *d1 = (Dog *)a1;
[d1 kanJia];//看家, 旺旺叫
[(Dog *)a1 kanJia];//看家, 旺旺叫 Dog *d = [Dog new];
Cat *c = [Cat new];
Pig *p = [Pig new]; [Person food:d];//啃骨头
[Person food:c];//吃鱼
[Person food:p];//大口吃
/*
在程序中如何表现:
父类指针指向子类对象
*/
return ;
}
oc22--多态的更多相关文章
- Java中的多态
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...
- C# 工厂模式+虚方法(接口、抽象方法)实现多态
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...
- C#非常重要基础之多态
前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历.过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用.结果这 ...
- C++多态详解
多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...
- 【那些年关于java多态应用】
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...
- JAVA多态
多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...
- C#多态“说来也说”——逻辑层BLL中的多态使用
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/5861842.html 昨天晚上,有个朋友说学了好久,依然没搞 ...
- java多态的理解
面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...
- java中如何实现多态
复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...
- OC多态
要点: 1.多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象.对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同.当通过此引用向对象发送消息,调 ...
随机推荐
- sql 系统函数
--查看表备注SELECT a.column_id AS No, a.name AS 列名, isnull(g.[value],'-') AS 说明 FROM sys.columns a left j ...
- C# 获取所有网卡信息
private void Form1_Load(object sender, EventArgs e) { //获取说有网卡信息 NetworkInterface[] nics = NetworkIn ...
- 解决JavaOpenCV的内存问题
在使用OpenCV时,程序总是在某个时间墨明棋妙地终止,打开CygWin ,输入 adb logcat ,查看打印的信息,发现是内存问题.经过反复的查找,发现使用OpenCV的java类库时,一定要慎 ...
- Python中字典的相关操作
1. Python类似于Java中的哈希表,只是两种语言表示的方式是不一样的,Python中的字典定义如下: 在Python中是一种可变的容器模型,它是通过一组键(key)值(value)对组成,这种 ...
- 雪花算法生成全局唯一ID
系统中某些场景少不了全局唯一ID的使用,来保证数据的唯一性.除了通过数据库自带的自增id来保证 id 的唯一性,通常为了保证的数据的可移植性会选择通过程序生成全局唯一 id.百度了不少php相关的生成 ...
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...
- S-HR薪酬项目与核算表的关系
- [luogu3230 HNOI2013] 比赛 (搜索+Hash)
传送门 Solution 搜索加Hash记录状态,记忆化搜索,需要注意顺序无关答案 Code //By Menteur_Hxy #include <map> #include <cm ...
- 2.SpringBoot的properties的属性配置详解
SpringBoot是为了简化Spring应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以 ...
- 使用idea创建maven项目时 需要注意的问题
截几张图来说明吧 上面的红色框如果不选中 将来创建的工程中没有webapp目录以及下面的子目录 选中之后 然后一直“下一步” 直到工程创建 但是我第一次按照正确的方式操作时 工程中并没有src ...