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

java从入门到起飞(七)——面向对象

文章目录

  • 一、什么是面向对象
    • 1.1 定义
    • 1.2 特点
  • 二、面向对象的基础
    • 2.1 面向对象的基础是抽象
    • 2.2 抽象的作用
    • 2.3 类和对象
    • 2.4 属性和方法
    • 2.5 构造方法
  • 三、面向对象的三大特征
    • 3.1 封装
      • 3.1.1 封装的意义
      • 3.1.2 封装的实现
    • 3.2 继承
      • 3.2.1 继承的意义
      • 3.2.2 继承的实现
    • 3.3 多态
      • 3.3.1 多态的意义
      • 3.3.2 多态的实现
  • 四、使用面向对象编程有哪些优点和缺点
    • 使用面向对象编程的优点
    • 使用面向对象编程的缺点
  • 五、总结

一、什么是面向对象

1.1 定义

面向对象编程(Object-Oriented Programming,简称OOP)是一种软件开发方法,它将程序设计看作是一组对象的集合,每个对象都有自己的状态和行为。面向对象的编程思想是以对象为中心,通过封装、继承和多态等特性来实现代码的复用、灵活性和可扩展性。

1.2 特点

  • 封装:将数据和方法封装在一个对象中,对象对外提供公共接口进行访问。
  • 继承:通过继承机制,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和重写。
  • 多态:同一类型的对象在不同的情况下可以表现出不同的行为,提高了代码的灵活性和可扩展性。

二、面向对象的基础

2.1 面向对象的基础是抽象

抽象是面向对象编程中的一个重要概念,它指的是将具体的事物抽象成一种更一般、更通用的概念或模型。在面向对象的编程语言中,抽象是通过类和对象来实现的。

2.2 抽象的作用

抽象的作用是隐藏内部实现细节,只对外提供公共接口。通过抽象,我们可以将复杂的问题简化成一些更容易理解和处理的概念。抽象提高了代码的可维护性和可复用性,使得代码更加灵活和易于扩展。

2.3 类和对象

  • 类:类是对一类具有相同属性和行为的对象的抽象,是创建对象的模板。
  • 对象:对象是类的实例,具有自己的状态和行为。
// 定义一个类
public class Person {// 属性private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 方法public void sayHello() {System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");}
}// 创建对象
Person person = new Person("Alice", 20);
person.sayHello(); // 输出:Hello, my name is Alice, I'm 20 years old.

2.4 属性和方法

  • 属性:类中定义的变量,用于描述对象的状态。
  • 方法:类中定义的函数,用于描述对象的行为。
public class Circle {// 属性private double radius;// 构造方法public Circle(double radius) {this.radius = radius;}// 方法public double getArea() {return Math.PI * radius * radius;}
}// 创建对象
Circle circle = new Circle(5);
double area = circle.getArea();
System.out.println("The area of the circle is: " + area); // 输出:The area of the circle is: 78.53981633974483

2.5 构造方法

  • 构造方法:用于创建对象并初始化对象的属性。
public class Student {// 属性private String name;private int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;}// 方法public void displayInfo() {System.out.println("Name: " + name);System.out.println("Age: " + age);}
}// 创建对象
Student student = new Student("Bob", 18);
student.displayInfo(); // 输出:Name: Bob, Age: 18

三、面向对象的三大特征

3.1 封装

3.1.1 封装的意义

  • 隐藏内部实现细节,只对外提供公共接口。
  • 提高代码的可维护性和可复用性。

3.1.2 封装的实现

  • 使用访问修饰符(public、private、protected)控制属性和方法的访问权限。
  • 提供公共方法(getter和setter)来访问和修改属性。
public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}Person person = new Person();
person.setName("Alice");
person.setAge(20);
System.out.println("Name: " + person.getName()); // 输出:Name: Alice
System.out.println("Age: " + person.getAge()); // 输出:Age: 20

3.2 继承

3.2.1 继承的意义

  • 代码复用:子类可以继承父类的属性和方法。
  • 类的层次结构:通过继承可以建立类之间的层次关系。

3.2.2 继承的实现

  • 使用关键字extends来实现继承。
  • 子类通过继承父类,可以直接使用父类的属性和方法。
public class Animal {public void eat() {System.out.println("Animal is eating.");}
}public class Dog extends Animal {public void bark() {System.out.println("Dog is barking.");}
}Dog dog = new Dog();
dog.eat(); // 输出:Animal is eating.
dog.bark(); // 输出:Dog is barking.

3.3 多态

3.3.1 多态的意义

  • 提高代码的灵活性和可扩展性。
  • 实现方法的重写和重载。

3.3.2 多态的实现

  • 方法重写:子类可以重写父类的方法,实现方法的多态性。
  • 方法重载:在同一个类中,可以定义多个同名方法,但参数类型或个数不同。
public class Shape {public void draw() {System.out.println("Drawing shape...");}
}public class Circle extends Shape {@Overridepublic void draw() {System.out.println("Drawing circle...");}
}public class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("Drawing rectangle...");}
}Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw(); // 输出:Drawing circle...
shape2.draw(); // 输出:Drawing rectangle...

四、使用面向对象编程有哪些优点和缺点

使用面向对象编程的优点

面向对象编程(Object-Oriented Programming,OOP)具有以下几个优点:

  1. 可重用性:面向对象的编程思想通过封装、继承和多态等特性,可以将代码组织成可重用的模块。这意味着可以在不同的项目中重复使用已经编写好的类和对象,减少了代码的重复编写,提高了开发效率。

  2. 灵活性:面向对象的编程思想使得代码更加灵活和可扩展。通过继承和多态,可以在不修改原有代码的情况下,对已有的类进行扩展和修改。这样可以更好地应对需求的变化,提高了代码的可维护性和可扩展性。

  3. 可维护性:面向对象的编程思想通过封装和隐藏内部实现细节,使得代码更加模块化和易于理解。这样可以降低代码的复杂性,减少了代码的维护成本,提高了代码的可维护性。

  4. 安全性:面向对象的编程思想通过封装和访问控制,可以保护对象的数据不被外部访问和修改。这样可以提高代码的安全性,防止数据被误用或破坏。

  5. 可扩展性:面向对象的编程思想通过继承和多态,可以很容易地扩展已有的代码。新的类可以继承已有的类,并可以重写父类的方法或添加新的方法,从而实现对已有功能的扩展。这样可以降低了系统的耦合度,提高了代码的可扩展性。

    总的来说,面向对象的编程思想可以使代码更加模块化、可维护和可复用,提高了开发效率和代码质量。它是现代软件开发中非常重要的一种编程范式。

使用面向对象编程的缺点

虽然面向对象编程(Object-Oriented Programming,OOP)有许多优点,但也存在一些缺点:

  1. 代码冗余性:面向对象编程的代码通常比较复杂,涉及到许多类和对象之间的关系。这使得代码的阅读和理解变得更加困难,也增加了程序的冗余性。在设计和实现过程中,需要花费更多的时间和精力来规划和组织代码结构。
  2. 性能开销:面向对象编程为了解决类与类之间的耦合,会做一层抽象和封装,会带来一定的性能开销。由于需要通过方法调用和对象间的消息传递来实现功能,相对于面向过程的编程方式,面向对象的程序可能会运行得更慢。
        尽管面向对象编程存在一些缺点,但通过良好的设计和编码实践,可以最大限度地发挥其优点,减少其缺点的影响。同时,现代编程语言和开发工具也提供了许多支持面向对象编程的功能和特性,使得开发者能够更加高效地使用面向对象编程思想。

五、总结

面向对象是一种软件开发方法,通过封装、继承和多态实现代码的复用、灵活性和可扩展性。类和对象是面向对象的基础,通过属性和方法来描述对象的状态和行为。熟练掌握面向对象的概念和特征对于Java开发非常重要。

相关文章:

java从入门到起飞(七)——面向对象

文章目录 一、什么是面向对象1.1 定义1.2 特点 二、面向对象的基础2.1 面向对象的基础是抽象2.2 抽象的作用2.3 类和对象2.4 属性和方法2.5 构造方法 三、面向对象的三大特征3.1 封装3.1.1 封装的意义3.1.2 封装的实现 3.2 继承3.2.1 继承的意义3.2.2 继承的实现 3.3 多态3.3.1…...

题集-三路划分和三数取中(快排优化)

快排排序是非常快的,但是有一种情况快排是无法进行的。 912. 排序数组 - 力扣(LeetCode) 这道题看上去没什么问题,但是如果我们用快排去提交的话,发现快排其实是被针对了的。 有一个样例是这样的。如果我们按照快排的…...

设计模式-迭代器

文章目录 1. 引言1.1 概述1.2 设计模式1.3 迭代器模式的应用场景1.4 迭代器模式的作用 2. 基本概念2.1 迭代器 Iterator2.2 聚合 Aggregate2.3 具体聚合 ConcreteAggregate 3. Java 实现迭代器模式3.1 Java 集合框架3.2 Java 迭代器接口3.3 Java 迭代器模式实现示例 4. 迭代器模…...

Hive学习(12)Hive常用日期函数

1、hive返回当天三种方式 select current_date; --返回年月日 --2017-06-15 select current_timestamp; --返回年月日时分秒 --2017-06-15 19:54:44 SELECT from_unixtime(unix_timestamp()); --2017-06-15 19:55:042、from_unixtime:转化unix时间戳到当前时区的时…...

PowerQuery动态加载M公式

Power Query 是Excel中的强大数据处理与转换工具,如果需要“动态”处理数据,大家第一时间想到的是可以使用VBA,利用代码创建M公式,进而创建PQ查询,但是复杂的M公式可能有很多行, 使用VBA处理起来并不是很方…...

2分钟搭建FastGPT训练企业知识库AI助理(Docker部署)

我们使用宝塔面板来进行搭建,更方便快捷灵活,争取操作时间只需两分钟 宝塔面板下安装Docker 在【软件商店中】安装【docker管理器】【docker模块】即可 通过Docker安装FastGPT 通过【Docker】【添加容器】【容器编排】创建里新增docker-compose.yaml以下…...

TDengine函数大全-字符串函数

以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 字符串函数 TDengine函数大全CHAR_LENGTHCONCATCONCA…...

part-02 C++知识总结(类型转换)

一.C常用的类型转换函数 在C中,有几种自带的类型转换函数可以用于不同类型之间的转换。以下是其中一些常用的自带类型转换函数: 1.隐式转换(Implicit Conversion) 数字类型之间的隐式转换,例如将int转换为float、do…...

stable diffusion实践操作-图生图

本文专门开一节写图生图相关的内容,在看之前,可以同步关注: stable diffusion实践操作 正文...

Jtti:Ubuntu18.04如何修改远程ssh端口号

要在Ubuntu 18.04上修改SSH的远程端口号,您需要编辑SSH服务器配置文件并指定新的端口号。以下是具体的步骤: 以root或具有sudo权限的用户登录到您的Ubuntu服务器。 备份SSH配置文件(可选): 在进行任何更改之前&…...

微软表示Visual Studio的IDE即日起开启“退休”倒计时

据了解,日前有消息透露称,适用于 Mac平台的Visual Studio集成开发环境(IDE)于8月31日启动“退休”进程。 而这意味着Visual Studio for Mac 17.6将继续支持12个月,一直到2024年8月31日。    微软表示后续不再为Visual Studio for Mac开发…...

好马配好鞍:Linux Kernel 4.12 正式发布

Linus Torvalds 在内核邮件列表上宣布释出 Linux 4.12,Linux 4.12 的主要特性包括: BFQ 和 Kyber block I/O 调度器,livepatch 改用混合一致性模型,信任的执行环境框架,epoll 加入 busy poll 支持等等,其它…...

element——switch接口成功后赋值打开开关

应用场景 基本用法使用v-model双向绑定值,进行开关控制 例子1:需求: **点击switch,出弹窗,点击弹窗保存按钮调接口成功后再赋值(row.orderButtonValue“1”)打开switch开的状态变颜色。 在vue 中使用 :va…...

WPF Border设置渐变色

背景色渐变 <Border> <Border.Resources> <Style TargetType"Border"> <Setter Property"Background"> …...

SAP_ABAP_OLE_EXCEL批导案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OLE_EXCEL批导 1.1 下载按钮 1.2 选择EXCEL上传&#xff0c;解析EXCLE数据&#xff0c; Call屏幕。 1.3 实现效果 1.4…...

MySQL以及版本介绍

一、MySQL的介绍 MySQL数据库管理系统由瑞典的DataKonsultAB公司研发&#xff0c;该公司被Sun公司收购&#xff0c;现在Sun公司又被Oracle公司收购&#xff0c;因此MySQL目前属于 Oracle 旗下产品。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用…...

stm32 iap sd卡升级

参考&#xff1a;STM32F4 IAP 跳转 APP问题_stm32程序跳转_古城码农的博客-CSDN博客 app程序改两个位置 1.程序首地址&#xff1a; 2.改中断向量表位移&#xff0c;偏移量和上面一样就可以 然后编译成bin文件就可以了...

D358周赛复盘:哈希表模拟⭐⭐+链表乘法翻倍运算(先反转)⭐⭐⭐

文章目录 2815.数组中的最大数对和思路完整版 2816.翻倍以链表形式表示的数字&#xff08;先反转&#xff0c;再处理进位&#xff09;思路完整版 补充&#xff1a;206.反转链表&#xff08;双指针法&#xff09;完整版 2817.限制条件下元素之间的最小绝对差&#xff08;cpp不知…...

java八股文面试[数据库]——索引的基本原理、设计原则

索引的设计原则 索引覆盖是什么&#xff1a; 索引&#xff08;在MySQL中也叫做“键&#xff08;key&#xff09;”&#xff09; 是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时&#xff0c;索引…...

2023年京东方便食品行业数据分析(京东数据报告)

​疫情中方便食品的销售一度火爆&#xff0c;但随着当前消费场景的开放&#xff0c;方便食品销售又恢复常态并开始下滑。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年7月份&#xff0c;京东平台方便食品的销量为800万&#xff0c;环比降低约23%&#xff0c;同比降…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...