OOPS中的多态:什么是多态【详解】

已发表: 2020-11-24

OOP 中的多态性是不可分割的,也是每一种面向对象编程语言的基本概念。 一个对象或引用基本上可以在不同的实例中采用多种形式。 正如这个词所暗示的那样,“poly”的意思是“许多”,而“morph”指向“forms”; 因此,作为一个整体的多态性意味着“具有多种形式的属性”。

面向对象的编程语言通过单个接口处理类和对象。 它实现了函数重载、覆盖和虚函数的概念。 此外,它通常用于检测编程中的继承。

阅读:多态性与继承

目录

OOP 中的多态性示例

多态性是面向对象编程语言中的一种方法,它根据调用它的对象的类执行不同的事情。 使用多态性,一条消息被发送到多个类对象,每个对象根据类的属性做出适当的响应。

以下是清楚地解释多态性的代码:

使用警告;
# 创建包类
包A;
# 创建构造函数
子新
{
# shift 将取包名
# 并将其分配给变量 'class'
我的 $class = 班次;
我的 $self = {
'名称' => 班次,
'roll_no' => 班次
};
子方法
{
print("这属于A类");
}
};
包B;
# @ISA 数组包含一个列表
# 该类的父类,如果有的话
我的@ISA = (A);

子方法
{
print("这属于 B 类");
}
主包;
B->方法();
A->方法();

输出:

这属于B类

这属于A类

学习构建 Swiggy、Quora、IMDB 等应用程序

解释

对于第一个输出,类 B 中定义的 method() 会覆盖从类 A 继承的定义,反之亦然。 此属性可用于扩展任何预先存在的包的功能,而无需重写整个类的整个定义。 因此,使程序员的工作变得容易,也是被广泛使用的原因。

Oops 中的多态性类型

在面向对象编程 (OOPS) 语言中,有两种类型的多态性,如下所示:

  1. 静态绑定(或编译时)多态性,例如方法重载
  2. 动态绑定(或运行时)多态性,例如,方法覆盖

资源

1. 编译时或静态多态

通过方法重载,在面向对象的编程语言中实现了静态多态性,允许程序员实现各种方法。 它们使用的名称可以相同,但参数不同。 某些条件有利于静态多态性,如下所示:

  • 所有参数的类型应该不同。
  • 参数的顺序可以不同。
  • 一种方法的参数数量应与另一种方法不同。

在静态绑定多态中,匹配类型和参数数量调用重载函数。

  • 由于所有这些信息在编译期间都可用,因此编译器会选择适当的函数。
  • 函数重载可以做到这一点,运算符重载也称为静态绑定或早期绑定。

程序

A//基类

{

诠释一个;

公开

无效显示()

{

cout<< “A类”

}

};

class B: public A // 派生类

{

诠释b;

公开

无效显示()

{

cout<< “B类” ;

}

};

在上述程序中,display() 函数原型在基类和派生类中都是相同的。 因此,此处不能应用静态绑定。 该程序将在运行时运行得最好,并选择适当的功能。

  • 在运行时,该语言的编译器通过识别这些方法的签名来识别各种方法。
  • 编译器首先识别方法签名并在程序编译期间决定特定方法调用的方法。
  • 编译时多态的执行要快得多,但过程不是那么灵活。

另请阅读: OOPS 面试问题

运行时或动态多态性

在动态多态中,对单个重写方法的调用在程序运行时解决。 方法覆盖是运行时多态性的突出例子之一。 在这个过程中,重写是通过指针和虚函数完成的。

  • 在方法覆盖中,在父类中存在的子类中声明单个方法。 子类获得了一个实现方法。
  • 在运行时多态性期间,类将自己的规范提供给另一个继承的方法。 这种方法之间的转移是在不修改父类对象代码的情况下实现的。

程序

#include <iostream>

使用命名空间标准;

class Animal { // 基类

公开

字符串颜色= “棕色”

};

class Dog: public Animal // 继承 Animal 类。

{

公开

字符串颜色= “绿色”

};

诠释主要(无效){

动物d=狗();

cout<<d.color;

}

输出:

棕色的

  • 运行时多态中,对象的方法在运行时而不是编译时被调用。
  • 它是通过方法覆盖实现的,它也被称为动态绑定或后期绑定。
  • 动态多态性的过程比编译时多态性相对较慢但灵活。

黑白编译时和运行时多态性的区别

编译时多态性运行时多态性
函数调用该函数在编译时调用。 该函数在运行时调用。
常用术语它被称为重载、早期绑定和静态绑定。 它被称为覆盖、后期绑定和动态绑定。
方法名称和参数在重载中,不止一种方法具有相同的名称,但具有不同数量或类型的参数。 在 Overriding 中,不止一种方法具有相同的名称、数量和类型的参数。
运营商它是通过函数和运算符重载来实现的。 它是通过虚函数和指针来实现的。
执行时间处理时间它在编译时执行比运行时多态性更快。 它在运行时执行比编译时多态性慢。
灵活性它不太灵活,因为一切都在编译时执行。 它更加灵活,因为一切都在运行时执行。

最后的话

多态性是 OOP 中必须学习的概念,因为它在编程时提供了几个优点。 使用多态,用户可以重构测试的类和代码。 它对于扩展编程本身很有用。 它还允许用户将多个不同类型的变量(例如 double、Float、Int 或 Long)存储在单个变量中,以便更轻松地搜索和实现它们。

如果您有兴趣了解有关 OOP、全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发 PG 文凭,该文凭专为工作专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

成为全栈开发人员

升级和 IIIT-BANGALORE 的软件开发 PG 文凭
了解更多