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. 类的成员
类的成员包括成员变量和方法。成员变量是类的属性,用于存储对象的状态。方法是类的行为,用于定义对象的操作。
在上面的示例中,model
和 year
是类的成员变量,而 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依赖:在pom.xml文件中添加ZooKeeper客户端的依赖项。例如,可以使用Apache Curator作为ZooKeeper客户端库: <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…...
地理数据的双重呈现:GIS与数据可视化
前一篇文章带大家了解了GIS与三维GIS的关系,本文就GIS话题带大家一起探讨一下GIS和数据可视化之间的关系。 GIS(地理信息系统)和数据可视化在地理信息科学领域扮演着重要的角色,它们之间密切相关且相互增强。GIS是一种用于采集、…...
Android 13 Media框架(3)- MediaPlayer生命周期
上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节。 1、MediaPlayer生命周期 MediaPlayer.java 一开始有对生命周期的描述,这里对这些内容进行翻译: MediaPlayer 是线程不安全的,创建…...

[oneAPI] BERT
[oneAPI] BERT BERT训练过程Masked Language Model(MLM)Next Sentence Prediction(NSP)微调 总结基于oneAPI代码 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&…...
F1-score解析
报错:valueError: Target is multiclass but average‘binary’. Please choose another average setting, one of 原因:使用from sklearn.metrics import f1_score多类别计算F1-score时报错,改函数的参数即可,如:f1_s…...

windows11下配置vscode中c/c++环境
本文默认已经下载且安装好vscode,主要是解决环境变量配置以及编译task、launch文件的问题。 自己尝试过许多博客,最后还是通过这种方法配置成功了。 Linux(ubuntu 20.04)配置vscode可以直接跳转到配置task、launch文件,不需要下载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<…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...