Java 中的多态性:概念、类型、特征和示例

已发表: 2022-04-18

Javascript 是最流行和广泛使用的面向对象编程语言之一,与 C#、PHP、Python、C++ 等一样。它使用户能够通过编程展示和解决现实生活中的概念,因为一切都表示为一个对象。 Java 作为一种编程语言的特性提供了多种途径,通过使代码更加动态和易于维护来简化软件开发。

在本文中,我们将探讨 Java 作为一种面向对象的编程语言,并理解继承、抽象、多态和数据封装的概念。 我们还将研究 Java 中的多态类型及其优缺点。

目录

面向对象编程概述

面向对象编程 (OOP) 语言是指那些在编码中使用实时“对象”概念的计算机语言。 它旨在通过编程实现继承、多态、循环、数据抽象等世俗实体。

程序员需要熟悉一些面向对象编程的基本概念。 这些概念术语对于学习 OOP 的特殊和独特特性(如封装、多态性等)是必要的。

1.类

“类”表示适用于类中所有指定“对象”的一组属性和方法。 对象可以是不同的类型,例如整数、数组或字符串等。类就像用户定义的原型,可以使用它创建不同的“对象”。

2. 对象

对象是 OOP 语言最基本的单位,代表现实生活中的真实数据。 对象具有调用它们的类的属性。

3.方法

方法是一组涉及不同功能的语句,这些功能组合在一起以执行特定任务。 它在完成用户定义的指令后返回输出。 它还可以执行没有输出的任务。 方法允许程序员在不重新键入代码的情况下重用代码。 Java 要求所有方法都属于一个类,这与 C++、C 或 Python 等语言不同。

面向对象的概念

面向对象编程有四个主要原则——Java 展示了所有这些属性:

1. 抽象

数据抽象是 OOP 语言的一个属性,它展示了必要的细节,同时保持对象的其他不相关细节对用户不可见,例如实现代码。 此功能仅显示基本和相关的详细信息,这有助于开发人员快速对类的功能进行适当的更改。

2.封装

数据封装是指将数据封装在单元内。 OOP 语言的这一特性保护封装的数据不受其他函数和方法的影响。 它将代码和指定的方法绑定在一起,以单个单元执行操作,从而防止它们被外部方法操作或访问。 这也称为数据隐藏。

3. 继承

继承是 OOP 语言的另一个重要特性,它允许一个类从其他类继承属性。 它基于代码可重用性的概念,从而减少了重复重新键入类特征的需要。 从另一个类继承的类称为子类,被继承的类称为超类。

4. 多态性

多态性允许对象采取多种形式并执行相似的任务或在不同的方法中表现出相似的行为。

Java中的多态性

多态性允许以各种方式执行单个任务。 它是一种有助于识别和区分相似代码实体的属性,从而提高 OOP 语言的效率。

在 Java 中,通过将对象声明为单独的实体来展示多态性。 以这种方式,可以以多种方式执行相同的动作。 多态性与继承一起被激活,使对象能够使用不同类的继承属性执行不同的任务。 方法或对象名称的不同区分了两个实体。

从世界顶级大学在线学习软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

多态性的特征

1. 强制

数据类型的隐式转换以防止编译期间的类型错误是强制的。 它不包括显式数据类型转换,而仅遵循 Java 允许的转换层次结构。 例如,如果操作数是浮点数且运算符是整数,则结果将是浮点数。

2. 多态参数/变量

在执行期间可以保存各种类型值的对象或变量称为多态变量或参数。 它规定在声明一个类时,相同的变量名可以保存不同的数据类型,相同的方法名可以保存不同的参数和返回类型。

3.内部运算符重载

运算符重载使用用户需要的运算符符号。 Java 支持内部运算符重载。 它也是静态多态性的一个例子。

Java中的多态类型

在 Java 中,可以使用以下方式调用多态性:

1.方法重载

方法重载是创建多个具有相同名称并属于同一类的对象或方法的过程。 它在一个类中起作用。

2.方法覆盖

方法覆盖是子类如何构成与超类中声明的方法相同的方法。 它跨类起作用。 如果子类包含超类中已经存在的相同方法,则子类中的函数将被覆盖。

Java中的子类型多态性

亚型多态性取决于向上转型和后期绑定。

  • 向上转型是一个过程,通过该过程,对象或方法可以通过将数据类型(浮点数、整数等)从子类型提升到超类型,方法是将其向上移动到继承层次结构中。
  • 后期绑定用于调用非最终实例的方法。

没有操作员参与其中,因为子类型本身是超类型的成员。 例如,如果一个类被命名为颜色,它的子类型可以是红色、蓝色、橙色、绿色等。子类型多态性包括子类型以展示超类型的属性。 但是,失去了对每个子类型的各个属性的访问权。

Java 中的运行时多态性

在 Java 中,运行时多态性也称为动态方法分派或动态绑定。 它是通过方法覆盖来实现的——调用一个被覆盖的方法以在运行时提供动态解析。 它可以通过函数而不是对象来实现。

下面是一个 Java 运行时多态的例子:

类车{

无效运行(){System.out.println(“驾驶”);}

}

大众汽车类扩展汽车{

void run(){System.out.println(“安全行驶 90 公里”);}

公共静态无效主要(字符串参数[]){

Car c = new Volkswagen();//向上转型

b.运行();

}

}

输出

90公里安全驾驶

Java中的编译时多态性

编译时多态性是通过方法重载来实现的。 这是在编译期间执行和解决对重载方法的调用的过程。 它也被称为静态多态性。 Java 足够灵活,允许用户使用具有相同名称的方法或对象,只要其声明和签名属性保持不同即可。

下面是一个 Java 编译时多态性的例子:

类 SimpleCalc

{

整数添加(整数 x,整数 y)

{

返回 x+y;

}

整数加法(整数 x,整数 y,整数 z)

{

返回 x+y+z;

}

}

公开课Demo

{

公共静态无效主(字符串参数 [])

{

SimpleCalc obj = new SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

输出

50

90

多态性的重要性

多态性使编写可以构成具有相同名称的不同类型实体的方法成为可能。 多态性在 Java 中是必不可少的,因为它具有各种使用优势以及它为使代码动态化提供的范围:

  1. 它允许代码的可重用性——相同的代码不需要多次编写。
  2. 它允许一个变量表现出多种行为——具有相同名称但不同的属性可以为保持代码的一致性开辟空间。
  3. 减少大量代码——它有助于调试,同时也缩短了编译时间,节省了用户的内存、能源和时间。

实现多态的可能问题

多态性的使用和实现可能会让人困惑。 它降低了代码的可读性,因此构成了多个错误和错误的威胁。 它还会根据需要产生执行功能的问题。

有一个经典问题需要注意:脆弱基类问题。 它指的是继承类的不正确组装和编码,导致方法显示出不可预测的结果。

结论

尽管所有其他标准仍然满足,但继承的脆弱性可能导致功能失调和损坏的代码。 这个基本的架构问题被认为是脆弱的基类问题。 通过加入 upGrad 的软件开发执行 PG 计划 - 全栈开发专业化,了解有关 Java 如何展示 OOP 概念的更多信息 获得行业专家的指导,并通过与同行进行动手协作项目来积累实用知识。

今天就预订座位!

什么是静态绑定和动态绑定?

在编译时确定的对象称为静态绑定。 另一方面,对象的动态绑定类型是在运行时确定的。 前者在方法重载期间使用,后者在方法覆盖期间使用。

方法覆盖和方法重载之间的两个根本区别是什么?

在 Java 中,方法覆盖不会覆盖静态、私有和最终方法,而方法重载会重载 Java 中的静态、私有和最终方法。 此外,将主题方法重写为动态绑定,另一方面,重载方法通过静态绑定。

Java中的多态性和继承有什么区别?

在Java中,多态和继承有几个不同点:

1. 继承是编码中真实世界父子关系的一种表示。 但是多态性是一种催化剂,它利用这种关系使程序更加动态。
2. 继承允许通过从父类继承子类的代码来重用代码。 相反,多态性允许子类在父类中重新定义其现有行为。