查看原文
其他

【Java编程教程】详解Java OOP 概念

点击关注👉 Java面试那些事儿 2023-09-01


在本页中,我们将了解 OOP 的基础知识。面向对象编程是一种范式,它提供了许多概念,例如继承、数据绑定、多态性等。


Simula被认为是第一个面向对象的编程语言。一切都表示为对象的编程范例被称为真正的面向对象的编程语言。


Smalltalk被认为是第一个真正面向对象的编程语言。


流行的面向对象语言有Java、C#、PHP、Python、C++等。


面向对象编程的主要目标是实现现实世界的实体,例如对象、类、抽象、继承、多态等。


# OOP(面向对象编程系统)


对象是指真实世界的实体,例如笔、椅子、桌子、计算机、手表等。面向对象编程是一种使用类和对象设计程序的方法或范例。它通过提供一些概念来简化软件开发和维护:


  • Object对象

  • Class类

  • Inheritance继承

  • Polymorphism多态

  • Abstraction抽象

  • Encapsulation封装


除了这些概念之外,面向对象设计中还使用了一些其他术语:


  • 耦合

  • 聚合


专属福利
👉点击领取:651页Java面试题库


# Object对象



任何具有状态和行为的实体都称为对象。例如,椅子、笔、桌子、键盘、自行车等。它可以是物理的,也可以是逻辑的。


对象可以定义为类的实例。对象包含地址并占用内存中的一些空间。对象可以在不知道彼此数据或代码的细节的情况下进行通信。唯一必要的是接受的消息类型和对象返回的响应类型。


示例:狗是一个对象,因为它具有颜色、名称、品种等状态以及摇尾巴、吠叫、进食等行为。


# class类


对象的集合称为类。它是一个逻辑实体。


类也可以定义为您可以从中创建单个对象的蓝图。类不占用任何空间。

Inheritance继承


当一个对象获得父对象的所有属性和行为时,它被称为继承。它提供了代码的可重用性。它用于实现运行时多态性。




Polymorphism多态


如果一项任务以不同的方式执行,则称为多态性。例如:为了说服客户不同,画一些东西,例如形状、三角形、矩形等。


在Java中,我们使用方法重载和方法覆盖来实现多态。


另一个例子可以是说些什么;例如,猫会说喵喵声,狗会发出汪汪的叫声,等等。


Abstraction抽象


隐藏内部细节和显示功能被称为抽象。比如电话,我们不知道内部处理。

在Java中,我们使用抽象类和接口来实现抽象。



Encapsulation封装


将代码和数据绑定(或包装)到一个单元中称为封装。比如一个胶囊,里面包裹着不同的药物。


java类就是封装的例子。Java bean 是完全封装的类,因为这里所有的数据成员都是私有的。


耦合


耦合是指另一个类的知识或信息或依赖关系。当类相互了解时,就会出现这种情况。如果一个类具有另一个类的详细信息,则存在强耦合。在 Java 中,我们使用 private、protected 和 public 修饰符来显示类、方法和字段的可见性级别。您可以使用较弱耦合的接口,因为没有具体的实现。


凝聚


内聚是指执行单个明确定义的任务的组件级别。单个明确定义的任务是通过高度内聚的方法完成的。弱内聚方法会将任务拆分成单独的部分。java.io 包是一个高度内聚的包,因为它有 I/O 相关的类和接口。但是,java.util 包是一个弱内聚包,因为它具有不相关的类和接口。


关联


关联表示对象之间的关系。这里,一个对象可以与一个对象或多个对象相关联。对象之间可以有四种类型的关联:


  • 一对一

  • 一对多

  • 多对一,并且

  • 多对多


让我们通过实时示例来了解关系。例如,一个国家可以有一个总理(一对一),一个总理可以有多个部长(一对多)。此外,许多国会议员可以有一位总理(多对一),而许多部长可以有多个部门(多对多)。


关联可以是单向的或双向的。


聚合


聚合是实现关联的一种方式。聚合表示一个对象包含其他对象作为其状态的一部分的关系。它表示对象之间的弱关系。它在 Java中也被称为has-a关系。就像,继承代表is-a关系。这是重用对象的另一种方式。


# OOP 相对于面向过程的编程语言的优势


  1. OOP 使开发和维护更容易,而在面向过程的编程语言中,如果代码随着项目规模的增加而增长,则管理起来并不容易。

2.OOP 提供数据隐藏,而在面向过程的编程语言中,可以从任何地方访问全局数据。



图:面向过程编程中的数据表示





图:面向对象编程中的数据表示



  1. OOP 提供了更有效地模拟真实世界事件的能力。如果我们使用面向对象的编程语言,我们可以提供实际应用问题的解决方案。


程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


热门推荐:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存