美文网首页
OC--面向对象 多态

OC--面向对象 多态

作者: iOS小武哥 | 来源:发表于2016-03-25 20:00 被阅读56次

一.基本概念

多态在代码中的体现,即为多种形态,首先必须要有继承,没有继承就没有多态.

在使用多态的时候,会进行自动的检测,以调用真实的对象方法.

多态的本质就是父类指针指向子类对象.

Animal类的声明:

#import//声明一个Animal类,该类继承NSobject

@interface Animal : NSObject

///animal中声明一个eat的对象方法

- (void)eat;

@end

#import "Animal.h"

@implementation Animal

//eat对象方法的实现

-(void)eat{

NSLog(@"动物吃东西");

}

@end

#import "Dog.h"

@implementation Dog

///重写eat方法,也就是重写父类方法

-(void)eat{

NSLog(@"🐶吃东西");

}

@end

#import#import "Animal.h"

#import "Dog.h"

int main(int argc, const char * argv[]) {

//Dog类型的指针指向Dog类型的对象

Dog *dog = [[Dog alloc] init];

//Dog类调用对象方法

[dog eat];

//多态

//父类指针指向子类对象

Animal *animal = [[Dog alloc]init];

//父类对象调用子类方法(调用的是Dog里面的方法)

[animal eat];

//动态监测--调用方法时,会监测对象的真实类型

///Animal类型的指针指向Animal类型的对象

Animal *a1 = [[Animal alloc]init];

[a1 eat];

///下面都是多态的体现

NSObject *n = [[Dog alloc]init];

//    [n eat];不能这样调用

NSObject *n1 = [[Animal alloc]init];

return 0;

}

二:使用注意

代码分析:

Dog *d = [[Animal alloc]init];

//动物是条狗???

NSString *str = [Dog new];

//狗是字符串???

//    OC语言是一门弱语法的语言,编译时并不会报错,所以我们要按照规范来写代码,不要出现狗是字符串这样的问题.

多态的好处:

需要一个新的函数专门用来喂狗

Void feed(Dog *d)

{

[d  eat];

}

如果这个时候也需要喂猫,那就应该重写新一个新的函数

Void feed(Cat *c)

{

[c  eat];

}

而狗和猫都继承动物这个类,在这里可以使用多态的代码来简化代码了,这里只需要把函数的参数改写成Animal*类型的,那么Dog和Cat类型的对象就可以传入进来,调用的时候直接把参数改了就行了.

多态的局限性:父类指针变量不能直接调用子类的特有方法,

不建议的做法:

Animal *aa = [[Dog alloc] init];

//    [aa ran];在Animal类中没有ran方法,这里调用狗对象的方法.

//解决方法 可以将a强制转化为Dog类型的变量,如下:

Dog * doq = (Dog *)aa;//这里的aa指向狗对象

[doq ran];

三:多态的总结:

1.没有继承就没有多态

2.代码的体现:父类类型的指针指向子类对象

3.好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数和相应的类型进行匹配了,

4,局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强转为子类特有的方法;

相关文章

  • OC--面向对象 多态

    一.基本概念 多态在代码中的体现,即为多种形态,首先必须要有继承,没有继承就没有多态. 在使用多态的时候,会进行自...

  • Java基础day08笔记:多态|多态中成员的特点|多态的应用示

    01-面向对象(多态-概念) 接下来说一下面向对象的第三个特征:多态。 何为多态呢? 其实...

  • 宅男知识大补丸 学多态 认包包

    java零基础入门-面向对象篇(十) 多态 面向对象的三大特征,封装,继承我们讲完了,这次来讲多态。 多态就是指一...

  • OC面向对象—多态

    OC面向对象—多态 OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没...

  • Java学习day-07:面向对象

    一、面向过程和面向对象 1.面向对象与面向过程的区别: 面向对象具有三大特征;封装,继承,多态;面向对象与面向过程...

  • Kotlin入门学习(二)

    新的篇章 面向对象 面向对象-封装 面向对象-继承 面向对象-抽象类和多态 接口 委托和代理 by关键字 委托...

  • 对象和面向对象的介绍

    对象分为 面向对象和基于对象: 面向对象:面向对象定义: 可以创建自定义类型、很好的支持继承和多态。面向对象的语言...

  • C#之面向对象基础篇

    面向对象编程:简称OOP 面试题:什么是面向对象? 答:封装,继承,多态即为面向对象 面相对象的方法: 面向对象的...

  • 面向对象

    面向对象有3大特性:封装、继承、多态1、介绍面向对象编程 面向对象编程(Object Oriented Progr...

  • python 高级 面向对象编程(OOP)

    面向对象有3大特性:封装、继承、多态 1、介绍面向对象编程 面向对象编程(Object Oriented Pro...

网友评论

      本文标题:OC--面向对象 多态

      本文链接:https://www.haomeiwen.com/subject/dombkttx.html