面向对象 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.mfbz.cn/a/600526.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

购物车操作

添加购物车: 需求分析和接口设计: 接口设计: 请求方式:POST 请求路径:/user/shoppingCart/add请求参数:套餐id、菜品id、口味返回结果:code、data、msg 数据库设计: 这上面出现了…

天锐绿盾 | 办公加密系统,源代码防泄密、源代码透明加密、防止开发部门人员泄露源码

天锐绿盾作为一款专注于数据安全与防泄密的专业解决方案,它确实提供了针对源代码防泄密的功能,帮助企业保护其核心的知识产权。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾可能采…

sprig 项目启动时报错:MybatisDependsonDatabaseInitializationDetector

问题 使用application.yml启动项目报错: 解决方案 修改pom.xml: 修改这两处的版本

英语学习笔记4——Is this your ...?

Is this your …? 词汇 Vocabulary suit /sut/ n. 西装,正装 suit 的配套: shirt n. 衬衫tie n. 领带,领结belt n. 腰带trousers n. 裤子shoes n. 鞋子 school /skuːl/ n. 学校 所有学校 搭配:middle school 初中    hig…

Linux信号捕捉

要处理信号, 我们进程就得知道自己是否收到了信号, 收到了哪些信号, 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表, 什么时候进行检测呢? 当我们的进程从内核态返回到用户态的时候&…

3d模型实体显示有隐藏黑线?---模大狮模型网

在3D建模和设计领域,细节决定成败。然而,在处理3D模型时,可能会遇到模型实体上出现隐藏黑线的问题。这些黑线可能影响模型的视觉质量和呈现效果。因此,了解并解决这些隐藏黑线的问题至关重要。本文将探讨隐藏黑线出现的原因&#…

五一小长假,景区智慧公厕发挥了那些作用?

五一小长假已经过去,在旅途中相信大家非常开心,其中也不乏一些细节让你有了更好的体验,而在您享受美景、畅游风光的同时,或许并未留意到那个角落里,默默为您服务的智慧公厕。是的,它们将成为您旅途中不可或…

动态规划算法:简单多状态问题

例题一 解法(动态规划): 算法思路: 1. 状态表⽰: 对于简单的线性 dp ,我们可以⽤「经验 题⽬要求」来定义状态表⽰: i. 以某个位置为结尾,巴拉巴拉; ii. 以某个位置为起…

2024/5/7 QTday2

练习:优化登录框,输入完用户名和密码后,点击登录,判断账户是否为 Admin 密码 为123456,如果判断成功,则输出登录成功,并关闭整个登录界面,如果登录失败,则提示登录失败&a…

论文复现丨多车场带货物权重车辆路径问题:改进邻域搜索算法

引言 本系列文章是路径优化问题学习过程中一个完整的学习路线。问题从简单的单车场容量约束CVRP问题到多车场容量约束MDCVRP问题,再到多车场容量时间窗口复杂约束MDCVRPTW问题,复杂度是逐渐提升的。 如果大家想学习某一个算法,建议从最简单…

小红书餐饮推广怎么合作?纯干货

小红书作为国内领先的生活方式分享平台,其用户群体主要集中在一二线城市,年龄分布在18-35岁之间,其中女性用户占比高达80%。这部分用户具有较高的消费能力、审美追求和品质生活需求,对美食有着极高的兴趣和消费意愿,为…

流畅的python-学习笔记_设计模式+装饰器+闭包

策略模式 类继承abc.ABC即实现抽象类,方法可用abc.abstractmethod装饰,表明为抽象方法 装饰器基础 装饰器实际是语法糖,被装饰的函数实际是装饰器内部返回函数的引用 缺点:装饰器函数覆盖了被装饰函数的__name__和__doc__属性…

Nginx从入门到精通速成

文章目录 一. **Nginx** **的简介**1.1 什么是 **nginx**1.2 正向代理1.3 反向代理1.4 **负载均衡**1.5 动静分离 二. **Nginx** **的安装**三. **Nginx** **的常用的命令**四. **Nginx** **的配置文件**五. **Nginx** **配置实例**反向代理实例**1**5.1 实现效果5.2 准备工作5…

基于51单片机的自动售货机系统

一、项目概述 本文设计了一款以AT89C51单片机为核心的自动售货机系统,并且着重详细地介绍了自动售货机的整体系统设计方案、硬件选择基础、软件使用方法及技巧。 以AT89C51作为CPU处理单元连接各个功能模块;以44矩阵键盘作为输入控制模块对货物进行种类…

论文阅读:RHO-1:Not All Tokens Are What You Need 选择你需要的 Tokens 参与训练

论文链接:https://arxiv.org/abs/2404.07965 以往的语言模型预训练方法对所有训练 token 统一采用 next-token 预测损失。作者认为“并非语料库中的所有 token 对语言模型训练都同样重要”,这是对这一规范的挑战。作者的初步分析深入研究了语言模型的 t…

计算有效声压

计算有效声压 clear all; %%----------------------------------------------读取文件------------------------------------------ % 从wav文件读入语音数据,该语音采样率16k,故信号最高频率8k。 [x,fs]audioread(C2_3_y.wav); % 取x的一个通道 xx(:,1)…

【智能优化算法】海象优化器(Walrus optimizer,WO)

海象优化器(Walrus optimizer,WO)是期刊“EXPERT SYSTEMS WITH APPLICATIONS”(中科院一区 IF 8.3)的2024年智能优化算法 01.引言 海象优化器(Walrus optimizer,WO)的灵感来自海象通过接收关键信号(危险信号和安全信号)选择迁徙、…

CISAW应急服务:网络安全应急响应之路——从经验到认证的体会

随着信息技术的飞速发展,网络安全问题日益凸显。作为一名网络安全从业人员,我深知每一次安全事件给组织甚至国家带来的巨大损失和潜在影响。在多年的实际工作中,我积累了一些网络安全应急服务经验,并参加了信息安全保障人员认证&a…

鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务

在鸿蒙的内核线程就是任务,系列篇中说的任务和线程当一个东西去理解. 一般二种场景下需要切换任务上下文: 在线程环境下,从当前线程切换到目标线程,这种方式也称为软切换,能由软件控制的自主式切换.哪些情况下会出现软切换呢? 运…

SSM+Vue+Element-UI实现教资考前指导系统

前言介绍 对于本教资考前指导系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据教资考前指导系统的现状来进行开发的,具体根据现实的需求来实现四六级在线考试系统网络化…