面向对象 01:Java 面向对象相关内容

前言

记录时间 [2024-05-07]

基础篇文章简摘:
Java 笔记 01:Java 概述,MarkDown 常用语法整理
Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad++ / JDK 安装及环境配置,编写第一个 Java 程序
Java 笔记 11:Java 方法相关内容,方法的设计原则,以及方法的定义和调用
Java 笔记 13:Java 数组内容,数组的声明、创建、初始化、赋值等,以及内存分析

更多 Java 相关文章,请参考专栏哦。

本文关于 Java 面向对象(未完结)

初识面向对象

面向对象编程(Object-Oriented Programming,简称OOP)是一种常见的编程范式,它通过将数据和操作组织为对象的集合来描述问题和构建解决方案。在面向对象编程中,对象是程序的基本单元,每个对象都包含数据和操作数据的方法。这种方法的核心思想是将现实世界中的事物抽象成程序中的对象,从而更好地模拟现实世界的问题。

面向对象编程有三个基本概念:封装、继承和多态。

  1. 封装(Encapsulation):封装是将数据和方法结合到一个单独的单元中的概念。对象封装了它的状态(数据)和行为(方法),并对外部隐藏了其内部实现细节。这样可以实现数据的安全性和保密性,同时提供了接口来访问对象的行为。
  2. 继承(Inheritance):继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以添加新的功能或修改现有功能,从而实现代码的重用和扩展。
  3. 多态(Polymorphism):多态性允许同一个方法在不同的对象上有不同的行为。它使得可以使用统一的接口来处理不同类的对象,而不需要针对每种类型编写特定的代码。多态性通过方法重载(Overloading)和方法重写(Override)来实现。

面向对象编程具有许多优点,包括代码重用性、可维护性、灵活性和扩展性。它可以帮助开发人员更好地组织和管理代码,减少代码的复杂性,并提高开发效率。

方法回顾加深

在面向对象编程中,方法是用于执行特定任务或操作的代码块。方法通常与类相关联,它定义在类中,并可以被类的实例调用执行。方法可以接受输入参数(也称为参数或参数列表),并可以返回一个值。

以下是关于方法的一些重要概念和特点:

  1. 方法的定义: 方法由方法名、参数列表、返回类型和方法体组成。方法名用于标识方法,参数列表定义了方法接受的输入参数,返回类型指定了方法返回的值类型,方法体包含了方法的具体实现。
  2. 参数和返回值: 方法可以接受零个或多个参数作为输入,并且可以返回一个值。参数是在方法被调用时传递给方法的值,而返回值是方法执行完毕后返回给调用者的值。
  3. 方法的调用: 要调用一个方法,需要使用方法名并传递所需的参数列表。在面向对象编程中,通常通过对象来调用方法,也可以通过类名直接调用静态方法(如果方法是静态的)。
  4. 方法的重载: 方法重载是指在同一个类中定义多个同名方法,但参数列表不同。编译器根据调用时传递的参数类型和数量来确定调用哪个方法。
  5. 方法的重写: 方法重写是指子类重新定义父类中的方法,从而覆盖父类中的方法实现。重写方法必须具有与被重写方法相同的签名。
  6. 访问修饰符: 方法可以使用访问修饰符来限制对方法的访问权限。常见的访问修饰符包括 public、protected、private 和 default(默认,不使用任何修饰符)。
  7. 静态方法: 静态方法是属于类而不是属于对象的方法。它们可以直接通过类名调用,无需实例化类的对象。

方法是面向对象编程的重要组成部分,它们使代码具有模块化、可复用和可扩展的特性,并有助于实现更清晰和结构化的代码。

对象创建分析

对象创建是面向对象编程中的重要概念,它涉及如何实例化一个类并创建一个对象的过程。以下是对象创建的一般分析:

  1. 选择合适的类: 在创建对象之前,需要确定要使用的类。类是对象的模板,描述了对象的属性和行为。根据需求,选择合适的类来创建对象。
  2. 实例化对象: 一旦选择了类,就可以实例化对象。实例化是指创建一个类的具体实例,也就是创建一个对象。在大多数编程语言中,使用关键字 new 来实例化对象,并调用类的构造函数来初始化对象的状态。
  3. 初始化对象的属性: 在对象创建之后,可能需要初始化对象的属性。这通常通过调用对象的构造函数来完成,构造函数负责初始化对象的各个属性。
  4. 执行构造函数: 构造函数是一个特殊的方法,用于初始化对象的状态。在对象创建时,构造函数会被自动调用。在一些编程语言中,可以定义多个构造函数,以支持不同的初始化方式。
  5. 分配内存空间: 在对象创建过程中,需要分配内存空间来存储对象的数据。编程语言会在堆内存或栈内存中分配足够的空间来存储对象的属性和方法。
  6. 返回对象的引用: 一旦对象创建完成并初始化,通常会返回对象的引用或指针,以便在程序中引用该对象并操作它。
  7. 使用对象: 最后,创建的对象可以在程序中使用。可以调用对象的方法来执行特定的操作,也可以访问对象的属性来获取或修改对象的状态。

总的来说,对象创建是面向对象编程中的基础操作之一,它涉及选择合适的类、实例化对象、初始化属性、执行构造函数、分配内存空间和返回对象引用等步骤。正确地创建对象是编写高质量面向对象程序的关键之一。

面向对象三大特性

面向对象编程具有三大特性:封装、继承和多态。这些特性是面向对象编程的核心概念,对于设计和实现高质量的面向对象程序至关重要。

  1. 封装(Encapsulation):
    • 封装是将数据和操作(方法)组合成一个单一的单元,并对外部隐藏对象的内部细节和实现细节的过程。
    • 封装通过访问控制(如私有、受保护和公共访问)来限制对对象内部数据和方法的直接访问。
    • 封装提高了代码的可维护性和可重用性,同时提供了更清晰的界面和抽象层次,使得对象的设计更加模块化和独立。
  2. 继承(Inheritance):
    • 继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。
    • 通过继承,子类可以重用父类的代码,避免了代码的重复编写,并且可以在不修改现有代码的情况下添加新功能或修改现有功能。
    • 继承提供了类之间的层次结构,使得代码的组织更加清晰,同时提高了代码的可扩展性和可维护性。
  3. 多态(Polymorphism):
    • 多态性允许同一个方法在不同的对象上有不同的行为。这意味着可以使用统一的接口来处理不同类的对象,而不需要针对每种类型编写特定的代码。
    • 多态性通过方法重载和方法重写来实现。方法重载是指在同一个类中定义多个同名方法,但参数列表不同,从而实现同名方法的多态性;方法重写是指子类重新定义父类中的方法,从而实现对方法的多态性。
    • 多态性提高了代码的灵活性和可扩展性,同时使得代码更加易于理解和维护。

这三大特性共同构成了面向对象编程的基础,它们使得面向对象程序具有更高的可重用性、可扩展性、灵活性和可维护性,从而更好地应对复杂的软件开发需求。

抽象类和接口

抽象类和接口是面向对象编程中用来实现抽象的两种机制,它们都有助于提高代码的灵活性和可重用性,但在一些方面有所不同。

抽象类(Abstract Class):

  1. 定义: 抽象类是一个不能实例化的类,它存在的目的是为了被继承。抽象类可以包含抽象方法和非抽象方法。抽象方法是没有实现的方法,需要在子类中被具体实现。非抽象方法可以有实现,也可以没有。

  2. 特点:

    • 抽象类可以包含成员变量、构造函数、普通方法以及抽象方法。
    • 子类继承抽象类后,必须实现父类中的所有抽象方法,否则子类也必须声明为抽象类。
    • 抽象类的存在是为了提供一个通用的模板,而具体的行为由子类来实现。
  3. 示例:

    abstract class Shape {int x, y;abstract void draw(); // 抽象方法void move() {// 非抽象方法}
    }
    

接口(Interface):

  1. 定义: 接口是一种纯抽象的类型,它定义了一组方法的签名但没有实现。接口可以看作是一种契约,规定了类应该具有哪些行为。

  2. 特点:

    • 接口中的方法默认都是抽象的,不能包含成员变量,但可以包含常量。
    • 类可以实现一个或多个接口,从而拥有接口定义的所有方法。
    • 接口提供了一种多继承机制,允许一个类实现多个接口。
  3. 示例:

    interface Drawable {void draw(); // 接口中的方法默认是抽象的
    }
    

区别:

  • 抽象类可以包含成员变量和普通方法的实现,而接口不能包含成员变量和方法的实现。
  • 类可以实现多个接口,但只能继承一个抽象类。
  • 抽象类的目的是为了提供一个通用的类模板,而接口的目的是为了定义一组规范,以实现类之间的通用契约。

在实际应用中,抽象类通常用于在具有一定通用性的情况下提供默认的行为,而接口通常用于定义一组规范,以便不同类实现这些规范并提供各自的实现。

内部类及 OOP 实战

内部类是定义在另一个类内部的类。Java中的内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。它们各自具有不同的作用和特点。

  1. 成员内部类(Member Inner Class):
    • 成员内部类是定义在另一个类的内部的普通类。
    • 成员内部类可以访问外部类的成员变量和方法,即使是私有的。
    • 成员内部类的实例化需要先创建外部类的实例,然后通过外部类的实例来创建内部类的实例。
    • 成员内部类可以被标记为static或非static,非static的成员内部类持有外部类的引用。
  2. 局部内部类(Local Inner Class):
    • 局部内部类是定义在方法内部的类,它只能在方法内部被访问。
    • 局部内部类可以访问方法内的局部变量,但这些变量必须是final的。
    • 局部内部类不能被标记为static或private,因为它的作用域仅限于方法内部。
  3. 匿名内部类(Anonymous Inner Class):
    • 匿名内部类是一种没有名字的内部类,通常用于创建只需要使用一次的简单类。
    • 匿名内部类通常是在创建接口的实例或继承类的实例时使用的,可以直接在创建实例的地方定义和使用。
    • 匿名内部类不能定义构造函数,因为它没有类名。
  4. 静态内部类(Static Nested Class):
    • 静态内部类是定义在另一个类内部的静态类。
    • 静态内部类不持有外部类的引用,可以直接访问外部类的静态成员,但不能访问非静态成员。
    • 静态内部类可以包含静态成员和非静态成员,与普通的类类似。

使用内部类的主要优点是它们可以访问外部类的私有成员,并且有助于组织和封装代码。它们通常用于实现一些紧密相关的功能,提高了代码的可读性和可维护性。

总结

一些参考资料

狂神说 Java 零基础:https://www.bilibili.com/video/BV12J41137hu/
TIOBE 编程语言走势: https://www.tiobe.com/tiobe-index/
Typora 官网:https://www.typoraio.cn/
Oracle 官网:https://www.oracle.com/
Notepad++ 下载地址:https://notepad-plus.en.softonic.com/
IDEA 官网:https://www.jetbrains.com.cn/idea/
Java 开发手册:https://developer.aliyun.com/ebook/394
Java 8 帮助文档:https://docs.oracle.com/javase/8/docs/api/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人IP打造孵化运营产业链商业计划书

【干货资料持续更新,以防走丢】 个人IP打造孵化运营产业链商业计划书 部分资料预览 资料部分是网络整理,仅供学习参考。 PPT共90页(完整资料包含以下内容) 目录 个人IP运营方案: 1. 个人IP定位与构建 1.1 人格画像构…

Terraform输入变量

使用输入变量可以在创建基础设施资源时动态传入值,如果把Terraform代码看作是一个函数,那么输入变量都是函数参数。 Terraform输入变量使用variable块进行定义,如下示例: variable "image_id" {type string # 变量类…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构:方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

基于FPGA的累加器及数码管显示VHDL代码Quartus仿真

名称:基于FPGA的累加器及数码管显示VHDL代码Quartus仿真(文末获取) 软件:Quartus 语言:VHDL 代码功能: 累加器及数码管显示 1、可以通过按键输入1~9 2、数字输入后进行累加,将累加结果显示…

【计算机科学速成课】笔记三

文章目录 17.集成电路真空管时代晶体管时代集成电路时代印刷电路板时代光刻时代 17.集成电路 Over the past six episodes, we delved into software, 过去 6 集我们聊了软件 \N 从早期编程方式到现代软件工程 from early programming efforts to modern software engineerin…

部署YUM仓库以及NFS共享服务

YUM仓库部署 一.YUM概述 YUM仓库源是一种软件包管理工具,用于在Linux系统上安装、更新和删除软件包。YUM仓库源包含了软件包的元数据信息和实际的软件包文件。用户可以通过配置YUM仓库源,从中下载和安装软件包。 常见的YUM仓库源包括: 本…

截图工具Snipaste:不仅仅是截图,更是效率的提升

在数字时代,截图工具已成为我们日常工作和生活中不可或缺的一部分。无论是用于工作汇报、学习笔记,还是日常沟通,一款好用的截图工具都能大大提升我们的效率。今天,我要向大家推荐一款功能强大且易于使用的截图软件——Snipaste。…

强大的禄得可转债自定义因子轮动系统完成,可转债三低为例子

经过几天的测试终于完成了可转债自定义因子轮动,超过1000行的源代码 我提供了服务器的数据支持自动api下载,我给大家维护数据 网页 http://120.78.132.143:8023/ 录得数据支持http://120.78.132.143:8023/lude_data_app api数据支持,我提供…

Vulnhub项目:ICA: 1

1、靶机介绍 靶机地址:ICA: 1 ~ VulnHub 2、渗透过程 首先,部署好靶机后,进行探测,发现靶机ip和本机ip,靶机ip156,本机ip146。 然后查看靶机ip有哪些端口,nmap一下。 出现22、80、3306端口&a…

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景API接口接口代码请求失败原因排查调通效果 常见返回类型相关文章 …

leetcode刷题:三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

mac android studio 首次无法连接安卓手机

缺少安卓手机需要的驱动,通过安装驱动解决 macport install android-platform-tools 在macOS上安装Android平台工具,可以使用Homebrew或者MacPorts。以下是使用MacPorts安装Android平台工具的步骤: 打开终端。 输入以下命令来安装Android平…

并行执行的概念—— 《OceanBase 并行执行》系列 一

From 产品经理: 这是一份姗姗来迟的关于OceanBase并行执行的系统化产品文档。 自2019年起,并行执行功能已被许多客户应用于多种场景之中,其重要性日益凸显。然而,遗憾的是,我们始终未能提供一份详尽的用户使用文档&…

initramfs及rpm/dracut操作

一、背景 更新bundle包后发现系统异常。 定位发现驱动升级不成功,内核启动后加载的还是更新前的旧驱动。但等内核启动完成后,卸载旧驱动手动insmod新驱动,是可以加载成功的。 驱动的安装目录在/lib/modules/$KERNELVERSION/extra目录下。 …

VMware下Ubuntu的安装教程

文章目录 一、Ubuntu如何下载1.下载官方地址https://ubuntu.com/2.点选Ubuntu服务器版本3.点击下载Ubuntu服务器版本iso镜像二、VMware安装Ubuntu服务器系统1.创建虚拟机2.选择下载好的Ubuntu服务器镜像3.创建安装完成三、Ubuntu Server如何设置1.Ubuntu Server没有中文所以全都…

突破AI迷雾:英特尔携手星环科技打造向量数据库革新方案,直降大模型幻觉

去年爆火的大模型,正在从百模大战走向千行百业落地应用。不过行业数据规模有限,企业数据隐私安全的要求等等因素,都让行业大模型的准确率面临挑战。近期发布的《CSDN AI 开发者生态报告》数据显示,“缺乏数据/数据质量问题”在大模…

CSS优先级的大小计算方式

CSS优先级是用来确定多个CSS规则应用于同一个元素时的顺序。计算CSS优先级遵循以下规则: 在CSS规则中使用的选择器越具体,优先级越高。选择器的具体性是通过选择器的组成部分进行计算的。 ID选择器比属性选择器和类选择器具有更高的优先级。类选择器和属…

Pycharm远程同步的mapping与sync

用Pycharm进行项目远程部署的时候会遇到两个同步文件,一个是点击 tools—>deployment—>configration——>mapping 一个是链接虚拟环境的时候会有一个sync,那么这两种同步有什么区别呢? 区别就是,2包括1,要用…

常见错误以及如何纠正它们

团队和关键结果目标 (OKR) 之间的关系是深刻且至关重要的。总而言之,一切都应该是相互关联的。正如《团队的智慧》一书中所强调的: 在团队中,没有什么比每个成员对共同目标和一组相关绩效目标的承诺更重要的了,而团队对此负有共同…

【热门话题】实用Chrome命令:提升前端开发效率的利器

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 实用Chrome命令:提升前端开发效率的利器引言目录1. 快速打开Chrome …