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

Java基础(十二)面向对象编程 OOP

一、抽象数据类型

1.面向对象基本概念

1. 面向对象

面向对象程序设计(OOP)是一种基于对象概念的软件开发方法,是目前软件开发的主流方式。

常见面向对象的语言:C++ 、Python 、Java
常见面向过程的语言:C

面向对象的三大特征:封装、继承、多态。

封装(Encapsulation):封装是面向对象编程的核心概念之一。它指的是将数据和操作封装在类中,并限制对数据的直接访问。通过封装,可以隐藏实现细节,提高代码的安全性和可维护性。

继承(Inheritance):继承是面向对象编程中实现代码重用的机制之一。通过继承,一个类可以继承另一个类的属性和方法,并且可以添加新的属性和方法。这样可以实现代码的层次化组织,提高代码的可复用性。

多态(Polymorphism):多态是面向对象编程中的一个特性,它允许使用统一的接口处理不同的对象类型。多态可以通过继承和接口实现,通过动态绑定在运行时确定要调用的方法。这种灵活性有助于编写可扩展的代码。

2. 对象

在面向对象的世界中认为万事万物皆对象。对象就是具体的某一事物。

3. 类.

类是具有相同的状态和相同的行为的一组对象的集合。


类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。


2. 定义类

1. 定义类

类的定义由关键字 class 开始,后面跟着类名。以下是一个简单的类的定义示例:

public class Car {// 类的成员变量String model;int year;// 类的方法public void start() {// 方法体System.out.println("Car started");}
}

2. 类的成员

类的成员包括成员变量和方法。成员变量是类的属性,用于存储对象的状态。方法是类的行为,用于定义对象的操作。

在上面的示例中,modelyear 是类的成员变量,而 start() 是类的方法。

3. 静态初始化

静态初始化是指在类加载时对静态成员变量进行初始化,在整个程序生命周期内只执行一次。可以使用静态代码块来实现静态初始化。

以下是一个静态初始化的示例:

public class MyClass {static int myStaticVariable;static {myStaticVariable = 10;System.out.println("Static initialization block executed");}
}

4. 实例初始化

实例初始化是指在每次创建对象时对实例成员变量进行初始化。可以使用构造函数或实例初始化块来实现实例初始化。

以下是一个实例初始化的示例:

public class MyClass {int myInstanceVariable;{myInstanceVariable = 20;System.out.println("Instance initialization block executed");}public MyClass() {System.out.println("Constructor executed");}
}

4. 构造函数

构造函数是一种特殊类型的方法,用于创建和初始化对象。它具有与类相同的名称,并且没有返回类型。

以下是一个具有构造函数的示例:

public class Person {String name;public Person(String n) {name = n;System.out.println("Person object created with name: " + name);}
}

3. static 作用

static 关键字表示静态成员,它可以应用于成员变量、方法和代码块。静态成员属于类本身,而不是对象实例。它们在类加载时被初始化,并且可以通过类名直接访问。

以下是静态成员的示例:

public class MyClass {static int myStaticVariable = 5;static void myStaticMethod() {System.out.println("Static method");}
}

实例(非静态/实例)

实例或非静态成员属于对象实例,每个对象都拥有自己的一份实例成员变量。只有通过创建对象的实例才能访问实例成员。

以下是实例成员的示例:

public class MyClass {int myInstanceVariable = 10;void myInstanceMethod() {System.out.println("Instance method");}
}

4. 构造重载

构造重载是指在同一个类中定义多个具有不同参数列表的构造函数。这样可以根据参数的不同创建不同的对象。

以下是构造重载的示例:

public class DemoPerson {public String name;public String gender;public int age;// 第一种构造方法重载:定义无参构造方法public DemoPerson() {this.name = "小羊呆呆";System.out.println(name);}// 第二种构造方法重载:定义带参构造方法public DemoPerson(String name) {System.out.println("你好!" + name);this.name = name;}// 第一种work() 方法重载,无参的 work() 方法public void work() {System.out.println(this.name + "的工作理念是:工作让生活更美好!");}// 第二种work() 方法重载,带参的 work() 方法public void work(String content) {System.out.println(this.name + "," + this.gender + "," + this.age + "岁的工作理念是:" + content);}public static void main(String[] args) {DemoPerson p1 = new DemoPerson("犯困桃子");DemoPerson p2 = new DemoPerson();p2.name = "康盛科技人才";p2.gender = "男";p2.age = 20;p1.work();p2.work("冒泡、摸鱼、打游戏。");}
}

输出:

你好!犯困桃子
小羊呆呆
犯困桃子的工作理念是:工作让生活更美好!
康盛科技人才,男,20岁的工作理念是:冒泡、摸鱼、打游戏。

5. 实例化的过程

实例化是指创建对象的过程。在实例化过程中,首先会进行静态初始化(只执行一次),然后进行实例初始化,最后执行构造函数。

以下是实例化过程的示例:

public class MyClass {static int myStaticVariable = 5;int myInstanceVariable;static {System.out.println("Static initialization block executed");}{System.out.println("Instance initialization block executed");}public MyClass() {System.out.println("Constructor executed");}public static void main(String[] args) {MyClass obj = new MyClass();}
}

输出:

Static initialization block executed
Instance initialization block executed
Constructor executed

6. 遮蔽(shadowing)

遮蔽是指在子类或局部作用域中使用与父类或外部作用域中同名的变量,从而隐藏了原有的变量。

以下是遮蔽的示例:

public class ParentClass {int x = 10;public void printX() {int x = 20;  // 局部变量 x 遮蔽了成员变量 xSystem.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);}
}public class ParentClass {int x = 10;// 遮蔽(shadowing)public void printX(int x) {System.out.println("Local x: " + x);System.out.println("例子 x: " + this.x);}public static void main(String[] args) {ParentClass p = new ParentClass();p.x = 200;p.printX(20);}
}
/*
Local x: 20
例子 x: 200
*/public class ChildClass extends ParentClass {int x = 30;public void printX() {int x = 40;  // 局部变量 x 遮蔽了父类的成员变量 xSystem.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);System.out.println("Parent x: " + super.x);}
}

1. this 解决遮蔽问题

this 关键字可以用于引用当前对象,通过 this 可以访问当前对象的成员变量。

以下是使用 this 解决遮蔽问题的示例:

public class ParentClass {int x = 10;public void printX() {int x = 20;System.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);  // 使用 this 引用成员变量 x}
}

2. className.staticField 解决遮蔽问题

通过使用类名限定的方式,可以访问被遮蔽的成员变量。

以下是使用类名限定解决遮蔽问题的示例:

public class ParentClass {static int x = 10;public void printX() {int x = 20;System.out.println("Local x: " + x);System.out.println("Static x: " + ParentClass.x);  // 使用类名限定访问静态变量 x}
}

相关文章:

Java基础(十二)面向对象编程 OOP

一、抽象数据类型 1.面向对象基本概念 1. 面向对象 面向对象程序设计(OOP)是一种基于对象概念的软件开发方法,是目前软件开发的主流方式。 常见面向对象的语言:C 、Python 、Java 常见面向过程的语言:C 面向对象的三…...

在阿里云服务器上安装Microsoft SharePoint 2016流程

本教程阿里云百科分享如何在阿里云ECS上搭建Microsoft SharePoint 2016。Microsoft SharePoint是Microsoft SharePoint Portal Server的简称。SharePoint Portal Server是一个门户站点,使得企业能够开发出智能的门户站点。 目录 背景信息 步骤一:添加…...

Ubuntu设置定时重启

1.安装/更新 cron 安装crontab sudo apt-get install cron更新命令 sudo apt-get update2.配置cron定时任务 sudo nano /etc/crontab* * * * * root reboot(从左到右,五个 * 依次是 分,时 ,天,月,星期)下列命令表示…...

sqlloader学习笔记

INFILE的用法 1)模糊导入多个数据的文件。 可以在文件名中使用通配符。 星号 (*) 表示复数字符,问号 (?) 表示单个字符。 INFILE emp*.dat INFILE m?emp.dat 2)如果不需要导入数据…...

内网ip与外网ip

一、关于IP地址 我们平时直接接触最多的是内网IP。而且还可以自己手动修改ip地址。而外网ip,我们很少直接接触,都是间接接触、因为外网ip一般都是运营商管理,而且是全球唯一的,一般我们自己是无法修改的。 内网IP和外网IP是指在…...

分布式 - 消息队列Kafka:Kafka消费者和消费者组

文章目录 1. Kafka 消费者是什么?2. Kafka 消费者组的概念?3. Kafka 消费者和消费者组有什么关系?4. Kafka 多个消费者如何同时消费一个分区? 1. Kafka 消费者是什么? 消费者负责订阅Kafka中的主题,并且从…...

feign调用和被调用者字段名称不对应解决

如果您在使用Feign时,尝试使用SerializedName("id")或JsonAlias("id")修饰字段,但仍然无法正常生效,可能是由于以下原因: Feign不会直接使用Gson库进行序列化和反序列化,而是使用了默认的Jackson库…...

【UE4 RTS】07-Camera Boundaries

前言 本篇实现的效果是当CameraPawn移动到地图边缘时会被阻挡。 效果 步骤 1. 打开项目设置,在“引擎-碰撞”中,点击“新建Object通道” 新建通道命名为“MapBoundaries”,然后点击接受 2. 向视口中添加 阻挡体积 调整阻挡体积的缩放 向四…...

大语言模型之二 GPT发展史简介

得益于数据、模型结构以及并行算力的发展,大语言模型应用现今呈井喷式发展态势,大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展,扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…...

前后端分离------后端创建笔记(09)密码加密网络安全

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...

《Effects of Graph Convolutions in Multi-layer Networks》阅读笔记

一.文章概述 本文研究了在XOR-CSBM数据模型的多层网络的第一层以上时,图卷积能力的基本极限,并为它们在数据中信号的不同状态下的性能提供了理论保证。在合成数据和真实世界数据上的实验表明a.卷积的数量是决定网络性能的一个更重要的因素,而…...

低代码助力传统制造业数字化转型策略

随着制造强国战略逐步实施,制造行业数字化逐渐进入快车道。提高生产管理的敏捷性、加强产品的全生命周期质量管理是企业数字化转型的核心诉求,也是需要思考的核心价值。就当下传统制造业的核心问题来看,低代码是最佳解决方案,那为…...

什么叫做云计算

什么叫做云计算 相信大多数人对云计算或者是云服务的认识还停留在仅仅听过这个名词,但是对其真正的定义或者意义还不甚了解的层面。甚至有些技术人员,如果日常的业务不涉及到云服务,可能对其也只是一知半解的程度。首先云计算准确的讲只是云服…...

springboot 使用zookeeper实现分布式队列

一.添加ZooKeeper依赖&#xff1a;在pom.xml文件中添加ZooKeeper客户端的依赖项。例如&#xff0c;可以使用Apache Curator作为ZooKeeper客户端库&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…...

地理数据的双重呈现:GIS与数据可视化

前一篇文章带大家了解了GIS与三维GIS的关系&#xff0c;本文就GIS话题带大家一起探讨一下GIS和数据可视化之间的关系。 GIS&#xff08;地理信息系统&#xff09;和数据可视化在地理信息科学领域扮演着重要的角色&#xff0c;它们之间密切相关且相互增强。GIS是一种用于采集、…...

Android 13 Media框架(3)- MediaPlayer生命周期

上一节了解了MediaPlayer api的使用&#xff0c;这一节就我们将会了解MediaPlayer的生命周期与api使用细节。 1、MediaPlayer生命周期 MediaPlayer.java 一开始有对生命周期的描述&#xff0c;这里对这些内容进行翻译&#xff1a; MediaPlayer 是线程不安全的&#xff0c;创建…...

[oneAPI] BERT

[oneAPI] BERT BERT训练过程Masked Language Model&#xff08;MLM&#xff09;Next Sentence Prediction&#xff08;NSP&#xff09;微调 总结基于oneAPI代码 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&…...

F1-score解析

报错&#xff1a;valueError: Target is multiclass but average‘binary’. Please choose another average setting, one of 原因&#xff1a;使用from sklearn.metrics import f1_score多类别计算F1-score时报错&#xff0c;改函数的参数即可&#xff0c;如&#xff1a;f1_s…...

windows11下配置vscode中c/c++环境

本文默认已经下载且安装好vscode&#xff0c;主要是解决环境变量配置以及编译task、launch文件的问题。 自己尝试过许多博客&#xff0c;最后还是通过这种方法配置成功了。 Linux(ubuntu 20.04)配置vscode可以直接跳转到配置task、launch文件&#xff0c;不需要下载mingw与配…...

Max Sum

一、题目 Given a sequence a[1],a[2],a[3]…a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 (-1) 5 4 14. Input The first line of the input contains an integer T(1<T<…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

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

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

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...