IOS Objective-C 继承(虚方法)
2014-04-09 20:38
363 查看
#import <Foundation/Foundation.h> @interface Father : NSObject -(void)jump; @end
#import "Father.h" @implementation Father -(void)jump{ NSLog(@"Father can jump 1.8m"); return ; } @end
#import "Father.h" @interface Son : Father @end
#import "Son.h" @implementation Son -(void)jump{ NSLog(@"Son can jump 1.6m"); return ; } @end
// // main.m // 继承(虚方法) // // Created by X-Liang on 14-4-9. // Copyright (c) 2014年 X-Liang. All rights reserved. // #import <Foundation/Foundation.h> #import "Father.h" #import "Son.h" int main(int argc, const char * argv[]) { @autoreleasepool { //父类的指针可以指向子类的对象 //虚方法:调用时不看指针看对象的方法为虚方法 //OC 中对象的调用都是不看指针看对象,所以OC中的方法为虚方法 //不同事物被相同事件触发,产生不同结果 Son *son=[[Son alloc] init]; Father *p=son; //调用的是子类的jump方法,调用方法是不看指针,看对象,对象的地址调用对象的方法 //虽然是Father的指针,但是Son对象的地址 //对象的地址调用对象的方法 [p jump]; } return 0; }
例子:
体现不同对象相同事件触发时,产生不同结果
#import <Foundation/Foundation.h> @interface Animal : NSObject -(void)BeBeatn;//表示被打时的响应 @end #import "Animal.h" @implementation Animal -(void)BeBeatn{ return ; } @end #import "Animal.h" @interface Cat : Animal @end #import "Cat.h" @implementation Cat -(void)BeBeatn{ NSLog(@"Brak ank jump to hight"); return ; } @end #import "Animal.h" @interface Dog : Animal @end #import "Dog.h" @implementation Dog -(void)BeBeatn{ NSLog(@"Give a hard bit"); return ; } @end #import "Animal.h" @interface Forg : Animal @end #import "Forg.h" @implementation Forg -(void)BeBeatn{ NSLog(@"Do nothing"); return ; } @end #import <Foundation/Foundation.h> #import "Animal.h" //#import "Cat.h" //#import "Dog.h" //#import "Forg.h" @interface Human : NSObject //如果没有虚方法的话,需要声明三个函数 //-(void)BeatDog:(Dog *)dog; //-(void)BeatCat:(Cat *)cat; //-(void)BeatForg:(Forg *)forg; //因为父类指针可以指向子类,所以可以仅声明一个BeatAnimal方法即可,传递Animal指针 -(void)BeatAnimal:(Animal *)animal;//形参为*Animal,为父类指针,可以指向Dog,Cat,Forg对象 @end #import "Human.h" @implementation Human -(void)BeatAnimal:(Animal *)animal{ NSLog(@"Beat %@",[animal class]);//输出Animal的类名 [animal BeBeatn]; return ; } @end
#import <Foundation/Foundation.h> #import "Dog.h" #import "Cat.h" #import "Animal.h" #import "Human.h" #import "Forg.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... // NSLog(@"Hello, World!"); Forg *forg=[[Forg alloc] init]; Dog *dog=[[Dog alloc] init]; Cat *cat=[[Cat alloc] init]; Human *xiaoming=[[Human alloc] init]; //Animal *animal=[[Animal alloc] init]; [xiaoming BeatAnimal:dog]; [xiaoming BeatAnimal:forg]; [xiaoming BeatAnimal:cat]; } return 0; }
相关文章推荐
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- js继承 Base类的源码解析
- Javascript 面向对象 继承
- JavaScript 继承使用分析
- Javascript面向对象编程(二) 构造函数的继承
- javascript面向对象之Javascript 继承
- JavaScript 对象、函数和继承
- 关于JavaScript的面向对象和继承有利新手学习
- JavaScript 继承详解(一)
- JavaScript 继承详解(二)
- 通过继承IHttpHandle实现JS插件的组织与管理
- php开发过程中关于继承的使用方法分享
- 实现JavaScript中继承的三种方式
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- javascript继承之为什么要继承
- JavaScript中创建对象和继承示例解读
- JavaScript中继承的一些示例方法与属性参考
- Javascript 原型和继承(Prototypes and Inheritance)
- JavaScript面向对象之Prototypes和继承
- JavaScript 的继承