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

server/2024/9/23 15:00:25/

前言

记录时间 [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. 示例:

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

接口(Interface):

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

  2. 特点:

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

    java">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.ppmy.cn/server/37531.html

相关文章

算法精讲:选择排序

基本思想 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前端,直到所有元素排完。 排序过程 初始关键字:【3 1 5 4 2】 第一趟排序后:1【3 5 4 2】 第二趟排序后&am…

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机:centos7.9 配置:4C8G40G 1. 下安装mysql5.7 安装mysql5.7: # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

电路板第一次调试注意事项

电路板第一次调试注意事项 调板经验其他人的经验一、上电前检查1、目测检查2、电源短路检查3、连线检查4、元器件安装检查 二、通电后检测1、通电观察2、静态调试3、动态调试 调板经验 1.打开原理图 PCB,熟悉一遍。 2.拿到板,找到输入正负极&#xff0…

TypeScript学习日志-第二十天(模块解析)

模块解析 一、ES6之前的模块规范 前端模块化规范是有很多的,在es6模块化规范之前分别有一下的模块化规范 一、Commonjs 这是 NodeJs 里面的模块化规范 // 导入 require("xxx"); require("../xxx.js"); // 导出 exports.xxxxxx function() …

加索引导致表被锁的原因及处理方法

目录 为什么加索引会导致表被锁?什么情况下会被锁?要注意什么?被锁怎么处理?MySQL查询被锁的表查询被锁的库 PostgreSQL查询被锁的表查询被锁的库 Oracle查询被锁的表查询被锁的库 SQL Server查询被锁的表查询被锁的库 结语 在数据…

聪明与诚实:社会信任的桥梁

在现代社会中,我们经常听到这样的评价:“某人真聪明。”然而,当我们深入思考时,会发现“聪明”这个词背后所承载的含义并不单一。聪明和狡诈往往被混淆,而诚实的价值却时常被忽视。在一个高度诚信的社会里,…

探秘WebSQL:轻松构建前端数据库

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘WebSQL:轻松构建前端数据库 前言WebSQL简介WebSQL的基本操作WebSQL的实际应用WebSQL的局限性和替代方案 前言 在Web的世界里,我们总是追求更好的用户体验和更快的响应速度…

react【实用教程】 搭建开发环境(2024版)Vite+React (官方推荐)

以项目名 reactDemo为例 1. 下载脚手架 在目标文件夹中打开命令行 npm create vite2. 安装项目依赖 cd reactDemo npm i若安装失败,则修改下载源重试 npm config set registry https://registry.npmmirror.com3. 启动项目 npm run dev4. 预览项目 浏览器访问 http…