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

Java继承简介

继承的本质:是代码的复用,重复使用已经定义好的方法和域(即全局变量)

要掌握继承首先要了解Java方法的重载和重写

方法的重载和重写

方法的重载

当前方法名相同,但是参数类型不同,发生重载

类比数学函数公式

重载发生在同一个类当中

方法的重写

发生在类的继承中, 子类重写父类的方法

方法名和参数列表必须相同

构造器就是典型的方法的重载

重写的特点:

子类优先调用自己重写后的方法,如果没有,向上寻找

继承中类的加载顺序

static代码块:在main方法执行之前执行,且执行一次。

先执行父类static,再执行子类static:创建子类对象之前,先创建父类对象

扫描加载----------->执行

加载的时候,一定先把父类加载到虚拟机。加载的时候注意父类和接口。先加载父类再加载子类,防止子类调用父类方法或域时无法找到

创建子类对象之前,一定先创建了父类对象

对象初始化顺序:

方法不调用不执行

方法块可以直接执行

方法块的优先级高于构造方法

方法块和属性谁在上面谁先执行

静态方法的属性或代码块优先级高于其他,同级别之间顺序按先后执行

静态优先级最高,且只初始化一次,即只执行一次

class Demo_1{
// 下面代码执行顺序: c --> 代码块1 --> a --> 代码块2 --> b --> 构造方法public Demo_1(){System.out.println("俺是构造方法:"+a);}public int a=10;{System.out.println("俺是代码块1:"+a);    }public int b =20;{System.out.println("俺是代码块2");    }public static int  c =90;public static Demo_1 s = new Demo_1();static{System.out.println("俺是静态代码块3");    }
}
// 产生多少个对象,非静态的代码块就执行多少次
// 但静态的只执行一次
public class Demo_1_Test{public static void main(String[] args){// main 方法中只有4个对象//Demo_1类中的static对象 s 只执行一次Demo_1 x1 = new Demo_1();Demo_1 x2 = new Demo_1();Demo_1 x3 = new Demo_1();}
}

以上代码运行结果:

俺是代码块1:10
俺是代码块2
俺是构造方法:10
俺是静态代码块3
俺是代码块1:10
俺是代码块2
俺是构造方法:10
俺是代码块1:10
俺是代码块2
俺是构造方法:10
俺是代码块1:10
俺是代码块2
俺是构造方法:10

静态的执行时间是类的首次使用时,是第一个对象产生的时候触发的,且仅由类的第一个对象触发——即静态的初始化是在第一个对象产生的时候触发的,且仅由类的第一个对象触发

子类对象产生时,一定会产生一个父类对象

父类对象一定优先于子类对象产生,父类的初始化一定优先于子类

父类静态 --> 子类静态 --> 父类非静态 --> 父类构造方法 --> 子类非静态 --> 子类构造方法。静态和非静态属性和代码块都有,按先后顺序初始化。

class Demo_1{public Demo_1(){System.out.println("俺是Demo_1构造方法");}{System.out.println("俺是代码块Demo_1");    }static{System.out.println("俺是静态代码块Demo_1");    }
}
// 子类对象产生时,一定会产生一个父类对象
// 父类对象一定优先于子类对象产生
class Demo_2 extends Demo_1{public Demo_2(){System.out.println("俺是Demo_2构造方法");}{System.out.println("俺是代码块Demo_2");    }static{System.out.println("俺是静态代码块Demo_2");    }
}public class Demo_1_Test{public static void main(String[] args){Demo_1 x1 = new Demo_1();Demo_2 x2 = new Demo_2();}
}

 上述代码执行结果:

俺是静态代码块Demo_1
俺是代码块Demo_1
俺是Demo_1构造方法
俺是静态代码块Demo_2
俺是代码块Demo_1
俺是Demo_1构造方法
俺是代码块Demo_2
俺是Demo_2构造方法

从内存的角度来理解,什么是方法的重写

子类重写了父类的方法,在子类调用该方法时,父类的该方法失效。

// AAA.java
package 继承;public class AAA {public void testA() {System.out.println("该方法当中有很多逻辑运算----》AAA");}public  AAA(String name) {System.out.println(name+",俺是AAA的构造函数!");}}
// BBB.java
package 继承;public class BBB extends AAA {public void name() {//调用父类的方法super.testA();   }public void run() {testA();}public void run(String name) {}public void testA() {System.out.println("该方法当中有很多逻辑运算----》BBB");}public BBB(String name) {super(name);System.out.println(name+",俺是BBB的构造函数!");}
}
// Test.java
package 继承;public class Test{public static void main(String[] args) {BBB bbb= new BBB("你好");bbb.testA();}
}

对上面的继承关系,main方法作为程序入口,开始执行程序。

new关键字创建了一个类BBB,而类BBB继承了类AAA,程序先将类AAA复制一份代码进入堆区,此内存区域内包括testA()方法,bbb指向的内存空间中,还包括BBB类的方法。内存示意图如下

在类AAA中添加方法testB()但在类BBB中未添加重写的方法,bbb也可以直接调用testB()方法。

public class AAA {// 其他方法public void testB() {System.out.println("该方法当中有很多BBB逻辑运算----》AAA");}}
package 继承;public class Test{public static void main(String[] args) {BBB bbb= new BBB("你好");bbb.testA();bbb.testB();}
}

bbb调用testB()会先在类BBB中寻找方法,没有此方法向上级类中继续寻找,如果直接父类中没有定义该方法,则继续向上寻找。等价于在类BBB中重写方法testB(),方法体中只有super.testB()。

但是final修饰的方法不可被重写。

super关键字

了解即可

本质两个用途:调用父类的普通方法;调用父类的构造器

调用父类的普通方法时,可以不使用super

调用父类构造器时只能在子类构造器中使用,并且必须写在子类构造器的第一行

Java的继承层次

Java只有单继承:即一个子类只能有一个父类,一个父类可以有多个子类

总结

1、重载发生在类内,重写发生在有继承关系的不同类中

2、子类对象创建之前先创建父类对象

3、程序初始化顺序:先父类再子类,先静态再非静态,构造方法在最后

注意:初始化顺序和执行顺序不一样,初始化指程序进入内存的顺序。

相关文章:

Java继承简介

继承的本质:是代码的复用,重复使用已经定义好的方法和域(即全局变量) 要掌握继承首先要了解Java方法的重载和重写 方法的重载和重写 方法的重载 当前方法名相同,但是参数类型不同,发生重载 类比数学函…...

redis之哨兵集群搭建

一:哨兵集群工作概览图 1.监控:sentinel通过心跳监控redis的master和slave实例是否正常工作 2.故障转移:假如master出现故障,sentinel会选举一个slave作为新的master,当故障实例恢复后身份会变成slave,会以…...

保姆级AI开发环境搭建

目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek(huggingface)3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…...

Arduino 型号的对比

常见 Arduino 型号的对比表格 涵盖了不同型号的关键参数和特点,方便你根据项目需求进行选择: 型号Arduino UnoArduino Mega 2560Arduino LeonardoArduino NanoArduino Due微控制器ATmega328PATmega2560ATmega32U4ATmega328P 或 ATmega168SAM3X8E&#…...

Kafka系列之:定位topic只能保存最新数据的原因

Kafka系列之:定位topic只能保存最新数据的原因 一、背景二、定位排查方向三、深入排查一、背景 kafka topic保存的数据少,topic只能保存最新的数据二、定位排查方向 能想到的定位排查方向:topic能存储的数据量、topic数据保存的时间、topic数据大小./bin/kafka-configs.sh -…...

AtCoder Beginner Contest 391(A~E题题解)

A - Lucky Direction 思路&#xff1a;纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…...

mysql mvcc 锁 关系

多版本并发控制&#xff08;MVCC&#xff09;是一种用于数据库并发控制的机制&#xff0c;它可以在保证数据一致性的同时&#xff0c;提高数据库的并发性能。下面结合 MVCC 机制&#xff0c;详细阐述常见的四种事务隔离级别&#xff08;读未提交、读已提交、可重复读、串行化&a…...

安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程

安装 AList 安装 Termux&#xff1a; 点击下载 更新软件包&#xff1a;打开 Termux&#xff0c;运行以下命令以更新软件包列表并升级已安装的软件包&#xff1a; bash复制 pkg update && pkg upgrade安装 AList&#xff1a;运行以下命令安装 AList&#xff1a; bash复…...

LeetCode:503.下一个更大元素II

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[…...

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…...

第二节 docker基础之---镜像构建及挂载

查看当前镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1&#xff0c;搜索镜像&#xff1a; [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...

论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding

MGMAE:Motion Guided Masking for Video Masked Autoencoding Abstract 掩蔽自编码&#xff08;Masked Autoencoding&#xff09;在自监督视频表示学习中展现了出色的表现。时间冗余导致了VideoMAE中高掩蔽比率和定制的掩蔽策略。本文旨在通过引入运动引导掩蔽策略&#xff0…...

记录一下 在Mac下用pyinstallter 打包 Django项目

安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…...

【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)

偏差和方差的权衡&#xff08;Bias-Variance Tradeoff&#xff09; 1. 引言 在机器学习模型的训练过程中&#xff0c;我们常常面临一个重要的挑战&#xff1a;如何平衡 偏差&#xff08;Bias&#xff09; 和 方差&#xff08;Variance&#xff09;&#xff0c;以提升模型的泛…...

deepseek本地部署-linux

1、官网推荐安装方法&#xff08;使用脚本&#xff0c;我绕不过github&#xff0c;未采用&#xff09; 登录ollama下载网站https://ollama.com/download/linux&#xff0c;linux下有下载脚本。 正常来说&#xff0c;在OS系统下直接执行脚本即可。 2、手动安装方法 2.1获取ol…...

解决使用python提取word文档中所有的图片时图片丢失的问题

python解析word文档&#xff0c;提取文档中所有的图片并保存&#xff0c;并将原图位置用占位符替换。 问题描述 利用python-dox库解析word文档&#xff0c;并提取里面的所有图片时发现会出现一摸一样的图片只解析一次&#xff0c;导致图片丢失&#xff0c;数量不对的情况。 …...

【Spring相关知识】Spring应用如何优雅使用消息队列

文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架&#xff0c;它基于 Spring Boot 和 Spring Inte…...

人工智能:从概念到未来

人工智能&#xff1a;从概念到未来 一、引言 在当今数字化时代&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;已从科幻小说和电影中的幻想逐渐走进现实&#xff0c;成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…...

CUDA Graph

cudaGraphLaunch 是 NVIDIA CUDA API 中的一个函数&#xff0c;用于在 CUDA Graphs 中启动一个已实例化的图。 CUDA Graphs 简介 CUDA Graphs 是 NVIDIA CUDA 编程模型中的一种技术&#xff0c;旨在优化 GPU 程序的性能。它允许将一系列连续的 GPU 操作&#xff08;如计算和数…...

1343. 大小为 K 且平均值大于等于阈值的子数组数目

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 在遍历时维护一个统计的变量&#xff0c;用来统计满足条件的子数组个数 2.2 代码尝试 class Solution { public:int numOfSubarrays(vec…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

Ubuntu系统多网卡多相机IP设置方法

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