ios开发动物园管理 继承多态的实现
//
// main.m
// 继承
// // #import <Foundation/Foundation.h>
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"
#import "FeedMan.h" int main(int argc, const char * argv[])
{ // Animal * animal = [Animal new];
//
// [animal eat];
//
// [animal sleep]; // //忘记引入头文件
// Animal * cat =[[Cat alloc]init];
//
// [cat eat]; // Cat * cat = [[Cat alloc]init];
//
// [cat catchMouse];
//
// Dog * dog = [[Dog alloc]init];
//
// [dog bark];
// //父类指针保存子类对象,如何调用子类对象的方法? // Animal * animal_cat = [[Cat alloc]init];
//
// FeedMan * man = [[FeedMan alloc]init];
//
// [man showName:animal_cat]; //[animal_cat eat]; // [animal_cat setName:@"Hello Cat"]; Animal * animal_dog = [[Dog alloc]init]; FeedMan * man = [[FeedMan alloc]init]; [man showName:animal_dog]; [man FeedAnimal:animal_dog]; //子类调用父类的方法。如何实现方法的不同性? return 0;
}
//
// FeedMan.h
// 继承
// #import "Animal.h" @interface FeedMan : NSObject -(void)showName:(Animal *)animal; -(void)FeedAnimal:(Animal *)animal;
@end
//
// FeedMan.m
// 继承 #import "FeedMan.h"
#import "Dog.h"
#import "Cat.h" @implementation FeedMan -(void)FeedAnimal:(Animal *)animal
{
if ([animal isKindOfClass:[Dog class]] ) { Dog * dog = (Dog *)animal;
[dog eat];
}
} -(void)showName:(Animal *)animal
{
//能够动态的检測动物的类型用到的一个类?
if([animal isKindOfClass:[Dog class]])
{
//须要强制类型转换
Dog * dog = (Dog *)animal;
[dog bark];
}
else if ([animal isKindOfClass:[Cat class]])
{
Cat * cat = (Cat *)animal;
[cat catchMouse];
} } @end
//
// Animal.h
// 继承 #import <Foundation/Foundation.h> @interface Animal : NSObject
{
NSString * _name; int _age;
} @property NSString * name;
@property int age; -(void)eat; -(void)sleep; -(void)showAge; @end
//
// Animal.m
// 继承
// #import "Animal.h" @implementation Animal -(void)eat
{
NSLog(@"动物吃东西");
} -(void)sleep
{
NSLog(@"动物睡觉了");
} -(void)showAge
{
NSLog(@"小动物的年龄");
}
@end
//
// Dog.h
// 继承
// #import "Animal.h" @interface Dog : Animal
{ } -(void)bark;
-(void)eat; @end
// Dog.m
// 继承
// #import "Dog.h" @implementation Dog -(void)bark
{
NSLog(@"小狗汪汪叫");
}
-(void)eat
{
NSLog(@"小狗吃东西");
} @end
//
// Cat.h
// 继承 #import "Animal.h" @interface Cat : Animal
{ }
-(void)catchMouse; -(void)eat;
@end
// Cat.m
// 继承
// #import "Cat.h" @implementation Cat
{ } -(void)catchMouse
{
NSLog(@"猫咪会捉老鼠! ");
}
-(void)eat
{
NSLog(@"小猫吃小鱼");
}
@end
ios开发动物园管理 继承多态的实现的更多相关文章
- IOS开发依赖管理工具CocoaPods
CocoaPods IOS开发依赖管理工具 CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It ...
- iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )
一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Bened ...
- iOS开发——源代码管理——SVN
一.源代码管理(svn)简介 01. 源代码管理工具概述 ======================================================================= ...
- iOS开发-内存管理
内存管理 对于这篇呢,其实现在都是ARC模式,正常状态下基本不用我们去手动释放内存,所以如果不是要面试呀.装逼或者扎实功底的,就先别看了或者了解下即可,因为像面试时,有些面试官想看你的基础时,就有些人 ...
- iOS开发-应用管理
// // ViewController.m // 21-应用管理-1 // // Created by hongqiangli on 2017/8/2. // Copyright © 201 ...
- iOS开发Objective-C基础之──多态
Objective-C语言是面向对象的高级编程语言,因此,它具有面向对象编程所具有的一些特性,即:封装性.继承性和多态性. 今天介绍一下Objective-C中的多态性. 一.什么是多态 多态:不同对 ...
- iOS开发——源代码管理——svn 命令行下常用的几个命令
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domai ...
- iOS开发ARC内存管理技术要点
本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...
- iOS开发-Alcatraz插件管理
CocoaPod负责iOS开发中的引用类库的管理,Alcatraz中文翻译阿尔卡特拉斯岛,也有人称之为恶魔岛,主要是负责管理第三方Xcode 插件.模版以及颜色配置的工具,直接集成到 Xcode 的图 ...
随机推荐
- ACM程序设计选修课——1031: Hungar的得分问题(二)(杨辉三角+二进制转换)
1031: Hungar的得分问题(二) 时间限制: 1 Sec 内存限制: 64 MB 提交: 15 解决: 10 [提交][状态][讨论版] 题目描述 距离正式选秀时间越来越近了,今天Hung ...
- bzoj1023【SHOI2008】cactus仙人掌图
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1023 求一棵仙人掌的直径 sol :orz YDC神犇 http://ydcydcy1.blo ...
- Java2WSDL 和 WSDL2Java(Axis)
原文地址:https://www.ibm.com/developerworks/cn/webservices/ws-axisfaq/ 生成或取得WSDL文件 生成客户端或服务端代码 执行WSDL2Ja ...
- offsetWidth clientWidth scrollWidth 三者之间的区别和联系
scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大. clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变. off ...
- Mysql之禁止使用索引
禁止使用索引:ignore index---------------------强制使用索引: force index mysql> explain select * from userinfo ...
- freemarker实现自定义指令和自定义函数
自定义指令: 1.指令在前台实现 <#macro name param1,param2,param3...paramN> </#macro> 2.指令在后台实现 1.实现Tem ...
- LeetCode OJ--Construct Binary Tree from Preorder and Inorder Traversal *
http://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 根据二叉树的前序遍 ...
- 十六进制字符串jpg图片互转
十六制字符串jpg图片互转(格式:FFD8FFE000104A******)如:FFD8FFE000104A46494600010100000100010000FFDB0043000806060706 ...
- 天梯赛 - L2-002 链表去重
GG思密达,第二个测试点的三分怎么也拿不上,我还是比较熟悉指针,用指针来写~,写完去上概率论 题目链接:https://www.patest.cn/contests/gplt/L2-002 #incl ...
- Codeforces 895E Eyes Closed(线段树)
题目链接 Eyes Closed 题意 两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...