//
// 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. Java面试概念之String、StringBuffer与StringBuilder的区别

    参考博客 http://www.cnblogs.com/lchzls/p/6711375.html java中String.StringBuffer.StringBuilder是Java编程中经常使用 ...

  2. spring框架搭建(一)

    spring介绍 spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发复杂性而诞生的. 简单来说spring是一个一站式轻量级开源框架. IOC:In ...

  3. Objective-C—— Block

    OC Block 其实功能就类似C语言的函数指针,js中的闭包之类的.把代码块当做一个变量就行操作,有自己的变量和作用域. 简单看一下Block的语法和可能出现的问题: Block语法: block语 ...

  4. 在C#程序中,创建、写入、读取XML文件的方法

    一.在C#程序中,创建.写入.读取XML文件的方法 1.创建和读取XML文件的方法,Values为需要写入的值 private void WriteXML(string Values) { //保存的 ...

  5. Java内存机制,内存地址

    问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...

  6. CorelDRAW记事本写实图标的制作流程

    本篇教程用CorelDRAW快速制作记事本写实图标,在制作的过程中主要使用了位图填充和金属材质的实现,加之一些常用工具的用法处理,最后将对象剪裁至图文框就好了,现在跟小编一起来看看详细的操作吧! 使用 ...

  7. Apache_安装

    1.下载安装包 网址:https://www.apachelounge.com/download/,下载你需要的安装包 2.解压文件到指定安装目录 3.修改配置文件 使用文本编辑器打开配置文件 con ...

  8. java HttpURLConnection 登录网站 完整代码

    import java.io.*; import java.util.*; import java.net.*; public class WebTest { public static void m ...

  9. 15.5.2 【Task实现细节】骨架方法的结构

    尽管骨架方法中的代码非常简单,但它暗示了状态机的职责.代码清单15-11生成的骨架方 法如下所示: [DebuggerStepThrough] [AsyncStateMachine(typeof(De ...

  10. flex记忆

    ._rebate { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -moz-flex; displ ...