Java 中的面向对象编程:封装、继承、多态、抽象

在本指南中,我们将通过现实生活中的例子讨论面向对象编程的四个重要特性。

面向对象的方法:介绍

Java 是一种面向对象的语言,因为它提供了实现面向对象模型的特性。这些特性包括抽象、封装、继承和多态。

OOPS 是关于围绕数据(即对象)开发应用程序,允许对象以自己的方式访问它们的属性和可能的操作。

抽象

OOPs 最基本的概念之一是 抽象。抽象是一个过程,在这个过程中你只展示“相关”的数据,并“隐藏”对象不必要的细节。例如,当你登录亚马逊账户时,你输入你的用户名和密码并按下登录按钮,按下登录按钮后发生了什么,输入的数据是如何发送到亚马逊服务器的,如何验证的,所有这些都对用户隐藏。

另一个抽象的例子:汽车本身是一个定义明确的对象,它由几个较小的对象组成,例如变速系统、转向机制、发动机等,这些较小的对象又有自己的子系统。但是对于人类来说,汽车是一个完整的对象,可以通过其子系统来管理,即使它们的内部细节是未知的。

封装

封装 是将数据与操纵它的代码绑定在一起。它使数据和代码免受外部干扰。

让我们来看一个汽车的动力转向系统的例子。汽车的动力转向是一个复杂的系统,内部有许多紧密耦合在一起的组件,它们同步工作以将汽车转向期望的方向。它甚至控制发动机传递到方向盘的动力。但是对外部世界来说,只有一个接口是可用的,其余的复杂性被隐藏。此外,转向单元本身是完整且独立的。它不会影响任何其他机制的运行。

类似地,封装的相同概念也可以应用于代码。封装的代码应该具有以下特点:

  • 每个人都知道如何访问它。
  • 无论实现细节如何,都可以轻松使用。
  • 代码不应对应用程序的其余部分产生任何副作用。

封装的理念是保持类分离,并防止它们之间紧密耦合。

Java 中的 java.util.Hashtable 类是封装的一个例子。用户只知道他可以将数据以键/值对的形式存储在 Hashtable 中,并且可以通过多种方式检索这些数据。但实际的实现,例如这些数据是如何存储的以及存储在哪里,对用户来说是隐藏的。用户可以在任何需要存储键/值对的地方简单地使用 Hashtable,而不必关心其实现。

继承

继承 是一种机制,通过它一个对象获得另一个对象的部分/全部属性。它支持层次分类的概念。

例如:汽车是一种四轮车,所以假设我们有一个 FourWheeler 类及其子类 Car。这里,汽车获得了 FourWheeler 类的属性。其他分类可以是吉普车、卡车、面包车等。FourWheeler 定义了一类具有四个轮子的车辆,并具有特定范围的发动机功率、载重能力等。Car(称为子类)继承了 FourWheeler 的这些属性,并且还有一些与其他四轮车不同的特定属性,例如豪华性、舒适性、形状、大小、用途等。

汽车还可以有进一步的分类,如敞篷车、小汽车、大汽车等,它们将继承 FourWheelerCar 的属性,但仍会有一些特定属性。通过这种方式,层次结构可以扩展到任何级别。

Java 中的 SwingAwt 类是继承的最佳示例。

多态

多态 意味着根据对象的数据类型不同地处理对象。换句话说,它意味着一个方法有多个实现,具体使用哪种实现取决于运行时的情况(即对象的数据类型)。

这可以通过设计一个通用接口来实现,该接口为一类操作提供通用方法,并且可以有多个类提供这些通用方法的实现。

让我们继续使用汽车的例子。汽车有一个变速传动系统。它有四个前进档和一个倒档。当发动机加速时,取决于接合的是哪个档位,不同的动力和运动会传递到汽车。操作相同,都是换挡,但根据档位的不同,操作表现不同,或者你可以说它显示了多种形式(多态意味着多种形式)。

多态可以是静态的也可以是动态的。方法重载 是静态多态性,而 方法重写 是动态多态性。

  • 重载 简单来说是指具有相同方法名但根据传递的参数不同而表现不同的方法。这被称为静态多态性,因为决定调用哪个方法是在编译时完成的。
  • 重写 意味着派生类实现了其超类的方法。对重写方法的调用在运行时解析,因此称为运行时多态性。

 

 

若你想提升Java技能,可关注我们的Java培训课程。