//
// 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--多态的更多相关文章

  1. Java中的多态

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...

  2. C# 工厂模式+虚方法(接口、抽象方法)实现多态

    面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...

  3. C#非常重要基础之多态

    前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历.过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用.结果这 ...

  4. C++多态详解

    多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...

  5. 【那些年关于java多态应用】

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...

  6. JAVA多态

    多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...

  7. C#多态“说来也说”——逻辑层BLL中的多态使用

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/5861842.html 昨天晚上,有个朋友说学了好久,依然没搞 ...

  8. java多态的理解

    面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...

  9. java中如何实现多态

    复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...

  10. OC多态

    要点: 1.多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象.对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同.当通过此引用向对象发送消息,调 ...

随机推荐

  1. B - Cows and Poker Game

    Problem description There are n cows playing poker at a table. For the current betting phase, each p ...

  2. 常用MIME类型(Flv,Mp4的mime类型设置)

    也许你会在纳闷,为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢?这就表明mp4格式文件是服务器无法识别的,其实,这是没有在iis中 ...

  3. windows phone传感器

    Windows phone中的传感器主要包括加速计传感器.罗盘传感器.陀螺仪传感器等 加速计传感器 Accelerometer类是加速传感器的接口,Accelerometer类位于Windows.De ...

  4. 使用cnblogs发布第一篇文章,HelloWorld

    HelloWorld! 瞅瞅源码的样式,嗯,语法高亮还是可以的,辨识度还是挺高的. <!DOCTYPE html> <html> <head> <meta c ...

  5. javascript基础(完整)

    一.什么是javascript? 是一种基于对象和事件驱动(以事件驱动的方式直接对客户端的输入做出响应,无需经过服务器端)并具有安全性能的解释型脚本语言,在web应用中得到非常广泛地应用.它不需要编译 ...

  6. 简单的UIButton按钮动画效果iOS源码

    这个是简单的UIButton按钮动画效果案例,源码,简单的UIButton按钮动画,可以自定义button属性. 效果图: <ignore_js_op> 使用方法: 使用时把ButtonA ...

  7. C#面对“重载”的Win 32 函数

    在Win32 Api中有很多添加/设置函数在参数上支持多种不同类型的结构体.这些参数定义为LPVOID* 或者LPBYTE,LPVOID*一般由Win32 分配内存空间,在C#从通过System.In ...

  8. Arduino ULN2009驱动步进电机

    一.实物图 二.例子代码 注:代码来自老外 http://www.4tronix.co.uk/arduino/Stepper-Motors.php 功能:控制电机正反转 // This Arduino ...

  9. js-undefinde的一点延伸

    前面写过一篇js中变量定义的问题:Js中判断变量存不存在的问题 本文再补充下,变量声明未初始化的情况,代码: <script> var a; alert(a==undefined)//tr ...

  10. Python笔记1----数据类型

    Python数据类型: 整型.字符串.浮点型.布尔型             列表.元祖.字典 1.整型: 范围: 32位机子:-231~231-1. 64位机子:-263~263-1 2.浮点型: ...