Java面向对像编程OOP

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

    • `OOP`
      • `总结:`
    • `类和对象的说明`
    • `Java中有无static修饰的方法的使用区别:`
      • `✅️有static修饰的方法:`
      • `❎️无static修饰的方法:`
      • `总结:`
    • `Java中关键字this引用的特性`
      • `this的特性`
      • `this的使用`
    • `Java构造方法`
      • `创建快捷键:fn+alt+insert`
      • <font color=red> 1. 方法重载(Overloading)
      • <font color=red> 2. 方法重写(Overriding)

OOP


class MyDog{
public String name;
public String color;
public int age;// --> 行为
public void barks(){System.out.println(name+":旺旺叫~");
}public void wag(){System.out.println(name+":摇尾巴~");
}}//有public修饰的就是公共类//在 Java 中,public 修饰符通常用于声明公共类型和公共成员,它们的主要特点是可以被其他类(包括不同包中的类)直接访问。// 如果没有特殊的访问控制需求,public 成员允许程序的所有部分都可以自由调用和操作这些类型或成员。//因此,你可以简单地说,public 修饰的类型被称为公共类型,而 public 修饰的成员(如方法、字段)被称为公共成员。public class OOP {public static void main(String[] args) {//--> 通过关键字new可以实例化多个对象MyDog mydog1 = new MyDog();mydog1.name = "大黄";mydog1.age=20;mydog1.color = "white";//通过对象访问属性System.out.println("姓名:"+mydog1.name);System.out.println("年龄:"+mydog1.age);System.out.println("颜色:"+mydog1.color);//通过对象调用方法mydog1.barks();mydog1.wag();
// -----------------------------------------------------------------------------------------MyDog mydog2 = new MyDog();mydog2.name = "大白";mydog2.age = 23;mydog2.color = "black";System.out.println("姓名:"+mydog2.name);System.out.println("年龄:"+mydog2.age);System.out.println("颜色:"+mydog2.color);//通过对象调用方法mydog2.barks();mydog2.wag();// ----------------------------------------------------------------------------------------- 
//我们可以通过new  关键字  实例化  多个对象MyDog dog3 = new MyDog();MyDog dog4 = new MyDog();MyDog dog5 = new MyDog();}
}

在这里插入图片描述

总结:

new关键字用于创造一个对象的实例。
使用.来访问对象中的属性或方法。
同一个类可以创建多个实例。

类和对象的说明

  • 👏思考

  • 1.引用可以指向引用吗?

  • 2.一个引用能不能同时指向多个对象?

  • 3.MyDog mydog1 = null代表mydog1这个引用指向一个null对象?

    • 1.不正确,引用只能指向对象(这里是两个引用同时指向一个对象)

在这里插入图片描述

    • 2.不可以,我们可以尝试给dog3这个引用创建多个对象,结果我们可以发现dog3这个引用是一个非常专注的宝子捏,它只能储存一个对象的地址呢。
      在这里插入图片描述
      在这里插入图片描述
    • 3.不正确,MyDog mydog1 = null代表mydog1这个引用不指向任何对象。

由于Java中基本数据类型无法直接进行交换,所以我们可以通过引用数据类型进行数据交换


//1.创建数值这个类
class  MyValue{//2.赋予其对应的属性public  int val;}public class SwapTwoValue {public  static  void swap(MyValue value1,MyValue value2){//6.接收调用所传的参数//7.交换过程int temp = value1.val;value1.val = value2.val;value2.val = temp;}public static void main(String[] args) {//3.实例化两个MyValue的对象MyValue val1 = new MyValue();MyValue val2 = new MyValue();//4.设置已实例化的属性值val1.val = 666;val2.val = 999;//8.交换前的结果System.out.println("交换前:"+val1.val);System.out.println("交换前:"+val2.val);//5.调用方法,并将两个对象的引用作为参数传入方法swap(val1,val2);//两个对象的引用val1和val2分别作为参数传入到上面的swap方法里面//9.打印调用后的结果System.out.println("交换后"+val1.val);System.out.println("交换后"+val2.val);}
}

Java中有无static修饰的方法的使用区别:

✅️有static修饰的方法:

⚠️可以通过类名直接调用,也可以通过对象调用,但推荐使用类名来调用。
  • ClassName.方法名()

❎️无static修饰的方法:

⚠️必需通过对象实例来调用方法。
  • 对象名.方法名()

总结:

在这里插入图片描述


public class Date {public int year;//年public int month;//月public int day;//日//创建一个给年月日赋值的方法:public void SetDate(int y,int m,int d) {year = y;month = m;day = d;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ year +"月:"+ month + "日:"+ day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}

public class Date {//成员变量public int year;//年public int month;//月public int day;//日//____________________________________________________________//创建一个给年月日赋值的方法:public void SetDate(int year,int month,int day) {//局部变量优先使用year = year;month = month;day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ year +"月:"+ month + "日:"+ day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}

在这里插入图片描述
在这里插入图片描述
在编程过程中会出现形参名和成员变量名一致的情况,局部变量会优先使用,因为int类型的默认值是0,所以调用PrintDate方法打印出来的结果是成员变量的默认值,即年:0月:0日:0,所以为了区分成员变量和局部变量,我们在Java中引入关键字this,这样我们的成员变量就能正确的被赋值为当前对象的值。


Java中关键字this引用的特性

this:表示当前对象的引用。

public class Date {//成员变量public int year;//年public int month;//月public int day;//日//____________________________________________________________//创建一个给年月日赋值的方法: 谁调用当前这个方法 谁就是thispublic void SetDate(int year,int month,int day) {//局部变量优先使用this.year = year;this.month = month;this.day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ this.year +"月:"+ this.month + "日:"+ this.day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}

this的特性

在这里插入图片描述

this的使用

在这里插入图片描述
在这里插入图片描述


Java构造方法

创建快捷键:fn+alt+insert

public class Date {//成员变量 --> 定义在方法外面类里面public int year;//年public int month;//月public int day;//日//______普通方法的创建__________________________________________________//创建一个给年月日赋值的方法: 谁调用当前这个方法 谁就是thispublic void SetDate(int year,int month,int day) {//局部变量优先使用this.year = year;this.month = month;this.day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ this.year +"月:"+ this.month + "日:"+ this.day);
//            this.haha();}public void haha(){System.out.println("haha!");}//______构造方法(Constructor)的创建__________________________________________________//fn+alt+insert生成构造方法的快捷键//构造方法的使用在创建对象那一刻就被调用了,是最先执行的public Date() {this(2020,8,6);this.year = 2024;this.month = 9;this.day = 13;System.out.println("执行了不带参数的构造方法....................");}//含三个参数的构造方法public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("执行了带三个参数的构造方法...................");}public static void main(String[] args) {Date date1 = new Date();}}

在这里插入图片描述

救急不救穷,一旦你有构造方法编译器就不会再给你提供。


对比项方法重载(Overloading)方法重写(Overriding)
发生位置同一个类中(比如说构造方法的创建)子类对父类的方法进行重写
参数列表 (参数类型、数量或顺序)必须不同必须相同
返回类型可以相同或不同必须相同
访问修饰符无要求子类的访问修饰符不能比父类更严格
静态/非静态方法可以应用于静态方法和非静态方法只能应用于非静态方法(静态方法不能被重写,但可以被隐藏)
注解不需要可以使用@Override注解以显式说明

1. 方法重载(Overloading)

  • 定义:在同一个类中,可以定义 多个方法名相同但参数不同(参数类型、数量或顺序不同)的方法
  • 发生位置:发生在同一个类中。
  • 条件:方法名相同,但参数列表不同。返回值类型可以相同或不同。
  • 目的:提供同一操作的不同方式,允许根据不同的输入参数来执行不同的逻辑。
  • 例子
class Example {// 重载方法,参数列表不同void print(int a) {System.out.println("Integer: " + a);}void print(String a) {System.out.println("String: " + a);}void print(int a, int b) {System.out.println("Two Integers: " + a + ", " + b);}
}

2. 方法重写(Overriding)

  • 定义:在子类中 对从父类继承的方法进行重新定义(修改),使子类能够提供自己的实现。
  • 发生位置:发生在子类中,重写父类的方法。
  • 条件:子类方法必须与父类方法具有相同的方法名、相同的参数列表和相同的返回值类型。方法的访问修饰符不能比父类方法更严格(可以相同或更宽松),并且重写的方法不能比父类的方法抛出更多的受检异常。
  • 注解:可以使用 @Override 注解来明确表示这是一个重写方法。
  • 目的:提供子类特定的实现,允许子类根据自己的需求修改父类的行为。
  • 例子
class Animal {// 父类方法void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {// 子类重写父类方法@Overridevoid sound() {System.out.println("Dog barks");}
}

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34988.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【MARL】MAT论文阅读笔记

文章目录 前言一、如何产生这个想法(TRPO -> ) PPO -> MAPPO -> HAPPO -> MAT 二、多智能体优势值分解定理三、transformer 在MAT的应用四、伪代码简述五、实验效果 前言 正好有节课让我们调研最新的自己的方向的新论文&#xff0c;找到一篇自己觉得比较可行&…

深度学习模型——双塔模型(Two-Tower Model)详解

双塔模型是一种高效、灵活的深度学习模型结构&#xff0c;广泛用于推荐系统和信息检索等场景中。其核心思想是分别为两个实体&#xff08;如用户和物品、查询和文档&#xff09;构建独立的特征表示网络&#xff08;两座塔&#xff09;&#xff0c;并在共享语义空间中通过相似性…

回溯里面的基本概念

1.深度优先遍历和深度优先搜索&#xff08;DFS) 深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始&#xff0c;沿着一条路一直走到底&#xff0c;然后从这条路尽头的节点回退到上一个节点&#xff0c;再从另一条路开始走到底...&#xff0c;不断递归重复此过程&#xff…

LeetCode 热题100(十五)【动态规划】(3)

15.7最长递增子序列&#xff08;中等&#xff09; 题目描述&#xff1a;leetcode链接 300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元…

springboot如何集成工作流审批流,流程设计器集成,业务表单和工作流绑定,详细步骤和实际案例参考(源码)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

02_Node.js模块化

02_Node.js模块化 知识点自测 以下代码运行的结果是多少&#xff1f; const arr [10, 20, 30] const result arr.map(val > val 1).reduce((sum, val) > sum val, 0) console.log(result) A&#xff1a;60 B&#xff1a;63 <details><summary>答案</…

vulnhub kioptirx1.2 超详细wp

探测 nmap --min-rate 10000 -p- 192.168.128.134 最小速率10000 nmap -sT -sV -sC -O 192.168.128.134 web打点 无弱口令 暴露cms寻找exp searchsploit LotusCMS -m 16982 [输入id号和参数m可以直接把东西复制到当前目录] 查看txt里面发现 都是xss没有rce github搜索到一个…

vulnhub靶场之【grotesque】三

前言 靶机&#xff1a;grotesque-3 192.168.1.44 攻击 &#xff1a;kali 192.168.1.16 都是虚拟机环境&#xff0c;桥接模式 主机发现 使用arp-scan -l或者netdiscover -r 192.168.1.1/24搜索 信息收集 使用nmap扫描 防止有遗漏&#xff0c;再扫描全端口 网站信息收集 …

大规模模型部署、推理的工具:Xinference

有没有 Xinference之前&#xff0c;如果想要部署应用一个开源模型&#xff0c;可能会面临以下一些情况和挑战&#xff1a; 自行开发推理框架&#xff1a; 需要投入大量的时间和精力来构建一个可靠且高效的推理框架&#xff0c;包括处理模型加载、资源管理、请求调度等复杂的任务…

C语言选择法排序

C语言编程&#xff0c;用选择法对数组中4个整数按由大到小排序 1、代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<string.h>int main() {void sort(int array[],int n);printf("测试开始\n");int nums[] {2,3,4,1};sort(n…

SpringBoot的validation参数校验

文章目录 前言一、引入validation 依赖二、validation中的注解说明 &#xff08;1&#xff09;Validated&#xff08;2&#xff09;Valid&#xff08;3&#xff09;NotNull&#xff08;4&#xff09;NotBlank&#xff08;5&#xff09;NotEmpty&#xff08;6&#xff09;Patte…

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…

docker学习笔记(四)--DockerFile

文章目录 一、什么是Dockerfile二、docker build命令三、dockerfile指令3.1 FROM3.2 ENV3.3 WORKDIR3.4 RUN3.5 CMD3.6 ENTRYPOINT3.7 EXPOSE3.8 ARG3.9 ADD3.10 COPY3.11 VOLUME 四、dockerfile示例 一、什么是Dockerfile Dockerfile 是用于构建 Docker 镜像的脚本文件&#…

撰写技术文档的关键步骤和核心要点

编写项目的技术文档是一个重要且细致的任务&#xff0c;它不仅有助于项目的当前开发团队理解系统的结构和工作原理&#xff0c;还为未来的维护和扩展提供了宝贵的参考资料。以下是撰写技术文档时应遵循的几个关键步骤和组成部分&#xff1a; 1. 概述 项目简介&#xff1a;简要…

Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱

问题1&#xff1a;在全屏后 日期选择器的下拉框无法显示。 解决&#xff1a;在Ant-Design-Vue的文档中&#xff0c;很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…

【前端学习路线】(超详细版本)

先附上学习路线图&#xff1a;前端学习路线 第一阶段&#xff1a;前端入门&#xff08;htmlcss&#xff09; 前端最基本的知识&#xff0c;需要先将这些内容融汇贯通&#xff0c;学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接&#xff1a; 黑马程…

Vue生成类似于打卡页面

数据表格 <el-table :data"tableData" border height"calc(100vh - 240px)" :cell-style"cellFun"><el-table-column label"姓名" show-overflow-tooltip prop"name" align"center"/><el-table-co…

JVM学习《垃圾回收算法和垃圾回收器》

目录 1.垃圾回收算法 1.1 标记-清除算法 1.2 复制算法 1.3 标记-整理算法 1.4 分代收集算法 2.垃圾回收器 2.1 熟悉一下垃圾回收的一些名词 2.2 垃圾回收器有哪些&#xff1f; 2.3 Serial收集器 2.4 Parallel Scavenge收集器 2.5 ParNew收集器 2.6 CMS收集器 1.垃圾…

波特图方法

在电路设计中&#xff0c;波特图为最常用的稳定性余量判断方法&#xff0c;波特图的根源是如何来的&#xff0c;却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源&#xff0c;给出了其对应关系和波特图相应的稳定性余量。 理论贯通&#xff0c;不在于精确绘…

【Java】2、集合框架 JCF

目录 CollectionListArrayList扩容机制System.arraycopy() 和 Arrays.copyOf()方法 LinkedList Set MapHashMap *重点&#xff1a; 底层机制&#xff08;源码&#xff09;应用场景 好处&#xff1a; 数组&#xff08;长度不可改&#xff0c;同一类型&#xff0c;增删不便&#…