当前位置: 首页 > 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<…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...