当前位置: 首页 > news >正文

Java 中的面向对象编程 (OOP) 概念

前言

顾名思义,面向对象编程或 Java OOP 概念是指在编程中使用对象的语言,它们使用对象作为实现代码中要发生的事情的主要来源。对象由查看者或用户看到,执行您分配的任务。

面向对象编程旨在在编程中实现现实世界中的实体,如继承隐藏多态性。OOP 的主要目的是将数据和操作它们的函数绑定在一起,以便除了该函数之外,代码的其他部分都无法访问这些数据。 

一、先决条件

让我们通过完善方法声明和消息传递的概念来讨论先决条件。

1. 方法声明

从方法声明开始,它由六个部分组成: 

  1. 访问修饰符:定义方法的访问类型,即在应用程序中可以从哪里访问它。在 Java 中,有 4 种类型的访问说明符: 
    1. 公共:可由应用程序中的所有类访问。
    2. protected:在其定义的包内及其子类(包括在包外声明的子类)中可访问。
    3. 私有(private):仅在定义它的类内可访问。
    4. 默认(未使用任何修饰符声明/定义):可在定义其类的同一类和包中访问。
  2. 返回类型:方法返回值的数据类型,如果没有返回值则为 void。
  3. 方法名称:字段名称的规则也适用于方法名称,但约定略有不同。
  4. 参数列表:以逗号分隔的输入参数列表,这些参数在括号内定义,前面是其数据类型。如果没有参数,则必须使用空括号 ()。
  5. 异常列表:您预期该方法会抛出的异常。您可以指定这些异常。
  6. 方法主体:它是括号内的代码块,您需要执行它来执行预期的操作。

2. 消息传递

对象通过相互发送和接收信息来相互通信。对象的消息是执行过程的请求,因此将调用接收对象中的函数来生成所需的结果。消息传递涉及指定对象的名称、函数的名称和要发送的信息。

掌握 Java 中的 OOP通过 Educative 的交互式课程“学习Java 中的面向对象编程”构建面向对象编程的基础,编写更清晰、更模块化、可重用的 Java 代码。

现在我们已经了解了基本前提条件,我们将继续讨论面向对象编程语言的 4 个支柱,如下所示。但是,让我们首先了解面向对象编程语言的不同特征。

二、面向对象编程特征

OOPS 概念如下:

  1. 1.
  2. 2. 对象
  3. 3. 方法和方法传递
  4. 4. OOP 的支柱
  5.     1. 抽象
  6.     2. 封装
  7.     3. 继承
  8.     4. 多态性
  9.          编译时多态性
  10.          运行时多态性

类是用户定义的蓝图或原型,对象就是从中创建的。它表示一组属性或方法,这些属性或方法对于同一类型的所有对象都是通用的。使用类,您可以创建具有相同行为的多个对象,而不必多次编写它们的代码。这包括代码中多次出现的对象的类。一般来说,类声明可以按顺序包含以下组件: 

  1. 修饰符:一个类可以是公共的,也可以具有默认访问权限(有关详细信息,请参阅此处)。
  2. 类名:类名按照惯例应该以首字母大写开头。
  3. 超类(如果有):类的父类(超类)的名称(如果有)前面带有关键字 extends。一个类只能扩展(子类化)一个父类。
  4. 接口(如果有):类实现的接口列表(如果有),以逗号分隔,前面加上关键字 implements。一个类可以实现多个接口。
  5. 主体:类主体被括号 { } 包围。

对象是面向对象编程的基本单元,代表现实生活中的实体。典型的 Java 程序会创建许多对象,这些对象通过调用方法进行交互。对象是执行代码的程序,是代码中可供查看者/用户查看的部分。对象主要包括: 

  1. 状态:由对象的属性来表示。它也反映了对象的性质。
  2. 行为:通过对象的方法表现出来。它还反映了一个对象对其他对象的响应。
  3. 身份:赋予对象的唯一名称,使其能够与其他对象交互。
  4. 方法方法是执行某些特定任务并将结果返回给调用者的语句集合。方法可以执行某些特定任务而不返回任何内容。方法允许我们重用代码而无需重新输入,这就是为什么它们被认为是节省时间的方法。在 Java 中,每个方法都必须是某个类的一部分,这与C、 C++和Python等语言不同。 

 

  类和对象一个简单的 Java 程序:    

public class GFG {static String Employee_name;static float Employee_salary;static void set(String n, float p) {Employee_name  = n;Employee_salary  = p;}static void get() {System.out.println("Employee name is: " +Employee_name );System.out.println("Employee CTC is: " + Employee_salary);}public static void main(String args[]) {GFG.set("Rathod Avinash", 10000.0f);GFG.get();}
}
输出
员工姓名为:Rathod Avinash
员工 CTC 为:10000.0

接下来,现在让我们讨论一下 OOP 的四大支柱。

三、OOP 的四大支柱

支柱一:抽象

数据抽象是一种属性,借助该属性,只向用户显示必要的细节。不向用户显示琐碎或非必要的单元。例如:汽车被视为汽车,而不是其各个部件。
数据抽象也可以定义为仅识别对象所需特征的过程,忽略不相关的细节。对象的属性和行为将其与类似类型的其他对象区分开来,也有助于对对象进行分类/分组。

举一个现实生活中的例子,一个人开车。这个人只知道踩油门会增加车速,踩刹车会使车停下,但他不知道踩油门后车速是如何增加的。他不知道汽车内部的机制,也不知道油门、刹车等在车内的实现。这就是抽象。 

在 Java 中,抽象是通过接口和抽象类实现的。我们可以使用接口实现 100% 的抽象。

抽象方法只包含方法声明,不包含方法实现。

抽象类的演示 

//abstract class
abstract class GFG{//abstract methods declarationabstract void add();abstract void mul();abstract void div();
}

支柱二:封装

它被定义为将数据包装在一个单元下。它是将代码和它操作的数据绑定在一起的机制。另一种思考封装的方式是,它是一种保护盾,可防止数据被该保护盾之外的代码访问。 

  • 从技术上讲,在封装中,类中的变量或数据对于其他类而言都是隐藏的,并且只能通过声明它们的类的任何成员函数来访问。
  • 在封装中,一个类中的数据对其他类是隐藏的,这与数据隐藏的作用类似。因此,“封装”和“数据隐藏”这两个术语可以互换使用。
  • 可以通过将类中的所有变量声明为私有变量,并在类中编写公共方法来设置和获取变量的值来实现封装。

封装演示:

//Encapsulation using private modifier //Employee class contains private data called employee id and employee name
class Employee {private int empid;private String ename;
}

支柱三:继承 

继承是面向对象编程 (OOP) 的重要支柱。它是 Java 中的一种机制,允许一个类继承另一个类的特性(字段和方法)。我们使用extends关键字来实现继承。继承也称为“ is-a ”关系。

让我们讨论一些经常使用的重要术语:

  • 超类:特性被继承的类称为超类(也称为基类或父类)。
  • 子类:继承其他类的类称为子类(也称为派生类、扩展类或子类)。子类除了可以添加超类的字段和方法外,还可以添加自己的字段和方法。
  • 可重用性:继承支持“可重用性”的概念,即当我们想要创建一个新类,并且已经有一个包含我们想要的部分代码的类时,我们可以从现有类派生出新类。通过这样做,我们可以重用现有类的字段和方法。

继承证明:

//base class or parent class or super class
class A{//parent class methodsvoid method1(){}void method2(){}
}//derived class or child class or base class
class B extends A{  //Inherits parent class methods//child class methodsvoid method3(){}void method4(){}
}

支柱四:多态性

它指的是面向对象编程语言能够有效区分具有相同名称的实体的能力。Java 借助这些实体的签名和声明来实现这一点。以多种形式出现的能力称为多态性。


注意: Java中的多态主要有两种类型: 

  1. 重载
  2. 覆盖 

例子

// Java program to Demonstrate Polymorphism// This class will contain
// 3 methods with same name,
// yet the program will
// compile & run successfully
public class Sum {// Overloaded sum().// This sum takes two int parameterspublic int sum(int x, int y){return (x + y);}// Overloaded sum().// This sum takes three int parameterspublic int sum(int x, int y, int z){return (x + y + z);}// Overloaded sum().// This sum takes two double parameterspublic double sum(double x, double y){return (x + y);}// Driver codepublic static void main(String args[]){Sum s = new Sum();System.out.println(s.sum(10, 20));System.out.println(s.sum(10, 20, 30));System.out.println(s.sum(10.5, 20.5));}
}

输出

30 
60 
31.0

四、面向对象常见问题及解答

Java 中的 OOP 概念是什么?

OOP(面向对象编程)是一种基于对象概念的编程范式,它可以包含字段(属性或特性)形式的数据和过程(方法或函数)形式的代码。在 Java 中,OOP 概念包括封装、继承、多态和抽象。

为什么 OOP 在 Java 中很重要?

OOP 有助于以更易于管理的方式组织和构建代码,使 Java 应用程序更易于维护和扩展。它还提高了代码的可重用性、模块化和灵活性,从而实现高效而强大的软件开发。

Java 中 OOP 的主要原理是什么?

Java 中 OOP 的主要原则是封装、继承、多态和抽象。封装确保对象的内部状态被隐藏,并且只能通过公共方法访问。继承允许一个类从另一个类继承属性和行为。多态使对象可以被视为其父类的实例。抽象侧重于隐藏实现细节并仅向外界显示必要的信息。

Java 中如何实现 OOP?

在 Java 中,OOP 通过类和对象实现。类是创建对象的蓝图,对象是该类的实例。每个对象都有自己的一组属性(变量)和方法(函数)。通过遵循封装、继承、多态性和抽象等 OOP 概念,Java 开发人员可以设计结构良好且易于维护的代码。

在 Java 中使用 OOP 有哪些优点?

在 Java 中使用 OOP 的一些优点包括代码可重用性、模块化、灵活性、可扩展性和更易于维护。OOP 使开发人员能够将现实世界的实体建模为对象,从而产生更直观、更有条理的代码。它还支持继承和多态性等功能,从而增强了 Java 应用程序的可扩展性和可读性。

你能提供一个 Java 中 OOP 概念实现的例子吗?

当然!Java 中 OOP 概念实现的一个示例是创建一个“Car”类,该类具有“make”、“model”和“year”等属性,以及“start()”、“accelerate()”和“stop()”等方法。通过实例化“Car”类中的对象并调用其方法,我们可以以结构化和面向对象的方式模拟不同汽车实例的行为。

五、结论

Java 中的面向对象编程 (OOP) 概念是一种组织和编写代码的强大方法。它使用类、对象、继承、多态性、封装和抽象等关键思想来创建灵活且可重用的代码。

通过使用 Java OOP 概念,程序员可以更有效地构建复杂的应用程序,使代码更易于管理、理解和修改。

总体而言,Java 的 OOP 概念有助于创建强大且可扩展的软件解决方案。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解析Java中1000个常用类:ListResourceBundle类,你学会了吗?
  • Linux安全与高级应用(十三)深入解析Linux中的rsync远程同步:原理、配置与应用
  • Layui——隐藏表单项后不再进行验证
  • 低代码开发平台:技术概览、效率与质量的权衡及挑战与机遇
  • Vue3配置路由
  • vue-lic
  • 【微信小程序】页面配置
  • docker的安装和常用命令
  • Android全面解析之context机制(三): 从源码角度分析context创建流程(下)
  • 偏导数的可视化
  • Java语言程序设计——篇十三(2)
  • 哈希表 - 赎金信
  • 数学建模笔记(2):Topsis分析法
  • java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2
  • 【洛谷/水滴题解】[NOIP2005 普及组] 采药
  • SegmentFault for Android 3.0 发布
  • 【mysql】环境安装、服务启动、密码设置
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Angular 响应式表单 基础例子
  • Golang-长连接-状态推送
  • IOS评论框不贴底(ios12新bug)
  • IP路由与转发
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 多线程编程之:notify 和 wait 用法
  • javascript从右向左截取指定位数字符的3种方法
  • nodejs实现webservice问题总结
  • Travix是如何部署应用程序到Kubernetes上的
  • Vim 折腾记
  • Vue2.0 实现互斥
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 高度不固定时垂直居中
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端之React实战:创建跨平台的项目架构
  • 浅谈Golang中select的用法
  • 如何用vue打造一个移动端音乐播放器
  • 山寨一个 Promise
  • 事件委托的小应用
  • 网络应用优化——时延与带宽
  • 用jQuery怎么做到前后端分离
  • 中文输入法与React文本输入框的问题与解决方案
  • 带你开发类似Pokemon Go的AR游戏
  • 第二十章:异步和文件I/O.(二十三)
  • 数据可视化之下发图实践
  • ​Redis 实现计数器和限速器的
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #if 1...#endif
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $.each()与$(selector).each()
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (4)STL算法之比较
  • (k8s)Kubernetes本地存储接入
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致