Java中的继承及相关概念
在 Java 中,继承是一种允许一个类继承另一个类的特性。通过继承,子类可以获取父类的属性和方法,这有助于减少代码冗余并提高代码的可维护性。以下是关于文件内容的相关分析和知识点总结:
一、继承的核心概念
1.继承的语法
-
Java 中的继承通过
extends
关键字实现,基本语法如下:
class ParentClass {// 父类代码
}class ChildClass extends ParentClass {// 子类代码
}
-
子类会自动继承父类的非私有属性和方法
2.方法的继承与重写
-
在继承中,子类可以继承父类中的方法和属性。例如,在
BBB.java
中,BBB
类继承了AAA
类的testA
方法(通过super.testA()
调用) 文件内容在下方 -
子类也可以重写父类的方法。在
BBB.java
中,BBB
类重写了父类的testA
方法,使其具有不同的实现
3.构造器的调用
-
子类在创建对象时,会自动调用父类的无参构造器(如果父类有无参构造器)。如果父类没有无参构造器,则子类需要显式调用父类的带参构造器,如
BBB.java
中的super(name)
4.继承层次
-
Java 只支持单继承,即一个子类只能继承一个父类。这是为了避免多重继承可能带来的复杂性问题,如 “菱形继承” 问题(Diamond Problem)
-
例如,
BBB.java
只能继承自AAA.java
,不能同时继承多个父类
二、相关代码示例及分析
1. 示例:AAA.java
package com.qcby;public class AAA {public void testA() {System.out.println("该方法当中有很多逻辑运算----》AAA");}public AAA(String name) {// 父类带参构造器}
}
-
AAA
类定义了一个方法testA
和一个带参构造器
2. 示例:BBB.java
package com.qcby;public class BBB extends AAA {public void testA() {System.out.println("该方法当中有很多逻辑运算----》BBB");}public void name() {super.testA(); // 调用父类的方法testA(); // 调用子类自己的方法}public BBB(String name) {super(name); // 调用父类的带参构造器}
}
-
BBB
类继承了AAA
类,并重写了testA
方法 -
在
name
方法中,通过super.testA()
调用了父类的testA
方法,展示了如何在子类中调用父类的方法 -
子类的构造器调用了父类的
super(name)
,确保父类的初始化
3. 示例:Test.java(继承测试)
package com.qcby;public class Test {public static void main(String[] args) {BBB bbb = new BBB("Example");bbb.name(); // 输出:// 该方法当中有很多逻辑运算----》AAA// 该方法当中有很多逻辑运算----》BBB}
}
-
在
main
方法中,创建了BBB
类的对象,并调用了name
方法,演示了继承和方法调用的过程
三、静态初始化与构造函数调用顺序
1. 示例代码:Demo.java
package stack;public class Demo {public Demo(String aa) {System.out.println("====" + aa);}static {System.out.println("11");}public static Demo demo = new Demo("+++");static {System.out.println("22");}public static void main(String[] args) {Demo demo = new Demo("----");}
}
2. 运行结果
11
11
===+
22
===-
3. 分析
-
静态块的执行顺序:静态块在类加载时执行,且按照代码中出现的顺序依次执行
-
在
Demo
类中,有两个静态块和一个静态变量初始化。静态块的执行顺序是:-
首先执行第一个静态块(
System.out.println("11");
) -
然后初始化静态变量
demo = new Demo("+++");
,这会触发Demo
类的构造函数执行 -
接着执行第二个静态块(
System.out.println("22");
)
-
-
-
构造函数的调用顺序:构造函数在对象创建时调用。在
main
方法中,调用new Demo("----");
时:-
首先执行
Demo
类的构造函数,输出====----
-
4. 总结
-
静态块用于类的初始化,执行顺序按照代码中的位置顺序。
-
构造函数用于对象的初始化,在创建对象时执行。
-
类加载过程中,静态块和静态变量初始化的顺序会影响程序的输出。
四、关键知识点总结
概念 | 说明 |
---|---|
继承语法 | 使用 extends 关键字实现,子类继承父类的非私有属性和方法。 |
方法重写 | 子类可以重写父类的方法,方法名、参数列表必须相同,实现不同。 |
构造器调用 | 子类创建对象时,需调用父类的构造器(super )初始化父类成员。 |
Java 单继承特性 | 一个子类只能继承一个父类,避免多重继承的复杂性。 |
静态块与构造函数 | 静态块用于类初始化,按代码顺序执行;构造函数用于对象初始化,在对象创建时调用。 |
五、实例代码与运行结果
1. 继承测试(Test.java)
package com.qcby;public class Test {public static void main(String[] args) {BBB bbb = new BBB("重写");bbb.name();bbb.testA();bbb.run();bbb.run("方法重载");}
}
2. 运行结果
该方法当中有很多逻辑运算----》AAA
该方法当中有很多逻辑运算----》BBB
该方法当中有很多逻辑运算----》BBB
该方法当中有很多逻辑运算----→BBB
3. 分析
-
调用
name
方法时:-
先通过
super.testA()
调用父类的testA
方法。 -
再调用子类的
testA
方法。
-
-
调用
run
方法时,展示了方法重载的特性。
六、总结
-
继承是 Java 中面向对象编程的重要特性,允许我们扩展类的功能,实现代码复用。通过继承,子类可以获取父类的属性和方法,并在此基础上添加自己的特性
-
super
关键字 在继承中扮演了重要角色,它可以用来调用父类的构造器、方法和属性 -
注意 Java 的单继承特性,避免过度使用继承,以保持代码的清晰性和可维护性
-
方法重载和重写 是继承机制中的常见概念,理解它们的区别和使用场景对于编写高质量的 Java 代码至关重要
-
静态块和构造函数的调用顺序 在类和对象的初始化过程中起着关键作用,需要根据实际需求合理安排代码
希望这篇博客能够帮助你更好地理解 Java 中的继承机制以及相关知识点!如有任何疑问,欢迎在评论区留言讨论。
相关文章:
Java中的继承及相关概念
在 Java 中,继承是一种允许一个类继承另一个类的特性。通过继承,子类可以获取父类的属性和方法,这有助于减少代码冗余并提高代码的可维护性。以下是关于文件内容的相关分析和知识点总结: 一、继承的核心概念 1.继承的语法 Java …...

语言月赛 202308【小粉兔做麻辣兔头】题解(AC)
》》》点我查看「视频」详解》》》 [语言月赛 202308] 小粉兔做麻辣兔头 题目描述 粉兔喜欢吃麻辣兔头,麻辣兔头的辣度分为若干级,用数字表示,数字越大,兔头越辣。为了庆祝粉兔专题赛 #1 的顺利举行,粉兔要做一些麻…...
云原生后端|实践?
云原生(Cloud Native)是一种构建和运行应用程序的方法,它充分利用云计算的优势,包括弹性、可扩展性、高可用性和自动化运维。云原生后端开发通常涉及微服务架构、容器化、持续集成/持续部署(CI/CD)、服务网…...
GrassWebProxy
GrassWebProxy第一版: using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json;…...
6.Python函数:函数定义、函数的类型、函数参数、函数返回值、函数嵌套、局部变量、全局变量、递归函数、匿名函数
1. 函数定义 Python函数通过def关键字定义。一个函数通常包括函数名、参数列表和函数体。 def greet(name):return f"Hello, {name}!"2. 函数的类型 Python中的函数主要有以下几种类型: 普通函数:具有明确的输入参数和返回值。递归函数&am…...
青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用
青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用 一、类类的定义和使用示例 二、定义1. 类定义语法2. 属性和方法3. 构造器和初始化4. 实例化5. 类变量和实例变量6. 类方法和静态方法7. 继承8. 多态总结 三、使用1. 创建类的实例2. 访问属性3. 调用方法4. 修…...

CosyVoice /F5-TTS /GPT-SoVITS /Fish-Speech 开源语音克隆与文本转语音(TTS)项目的对比整理
四个主流开源语音克隆与文本转语音(TTS)项目的对比整理,基于公开资料与实测反馈总结: 项目CosyVoice F5-TTS GPT-SoVITS Fish-Speech 核心技术双向流式语音合成,支持离线与流式一体化建模基于流匹配的ConvNeXt文本表示…...
MySQL基于binlog和gtid主从搭建方案
MySQL基于binlog和gtid主从搭建方案 一.主库配置 1.1 确认 binlog 是否开启 SHOW VARIABLES LIKE %log_bin%; 1.2 创建日志目录并设置权限 mkdir -p /opt/mysql/log_bin chown -R mysql:mysql /usr/local/mysql chmod -R 755 /usr/local/mysql 1.3 修改 my.cnf 配置文件 …...

5 计算机网络
5 计算机网络 5.1 OSI/RM七层模型 5.2 TCP/IP协议簇 5.2.1:常见协议基础 一、 TCP是可靠的,效率低的; 1.HTTP协议端口默认80,HTTPSSL之后成为HTTPS协议默认端口443。 2.对于0~1023一般是默认的公共端口不需要注册,1024以后的则需…...

Vim跳转文件及文件行结束符EOL
跳转文件 gf 从当前窗口打开那个文件的内容,操作方式:让光标停在文件名上,输入gf。 Ctrlo 从打开的文件返回之前的窗口 Ctrlwf 可以在分割的窗口打开跳转的文件,不过在我的实验不是次次都成功。 统一行尾格式 文本文件里存放的…...

智能理解 PPT 内容,快速生成讲解视频
当我们想根据一版 PPT 制作出相对应的解锁视频时,从撰写解锁词,录制音频到剪辑视频,每一个环节都需要投入大量的时间和精力,本方案将依托于阿里云函数计算 FC 和百炼模型服务,实现从 PPT 到视频的全自动转换࿰…...
【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)
目录 1 简介 1.1 场景介绍 1.2 约束与限制 2 文本转语音 2.1 场景介绍 2.2 约束与限制 2.3 开发步骤 2.4 设置播报策略 2.4.1 设置单词播报方式 2.4.2 设置数字播报策略 2.4.3 插入静音停顿 2.4.4 指定汉字发音 2.5 开发实例 3 语音识别 3.1 场景介绍 3.2 约束…...

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用
概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案,包括 DTO语言 更全面更强大的缓存机制,以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力,包括Jimmer独创的远程异常 …...
番外02:前端八股文面试题-CSS篇
一:CSS基础 1:CSS选择器及其优先级 2:display的属性值及其作用 属性值作用none元素不显示,并且会从文档流中移除block块类型,默认元素为父元素宽度,可设置宽高,换行显示inline行内元素类型&a…...
Redis Copilot:基于Redis为AI打造的副驾工具
我们最近发布了Redis Copilot,以帮助开发者更快地使用Redis构建应用。我们的使命是使应用程序快速运行,并简化构建过程。为此,Redis Copilot作为您的AI助手,能够让您更迅速地完成与Redis相关的任务。您今天就可以在Redis Insight中…...
JavaScript遍历对象的7种方式
注:纯手打,如有错误欢迎评论区交流! 转载请注明出处:https://blog.csdn.net/testleaf/article/details/145523427 编写此文是为了更好地学习前端知识,如果损害了有关人的利益,请联系删除! 本文章…...
如何避免NACK重传风暴
策略 1,10 次 NACK 模块对同一包号的最大请求次数,超过这个最大次数限制,会把该包号移出 nack_list,放弃对该包的重传请求。 策略 2,20 毫秒 NACK 模块每隔 20 毫秒批量处理 nack_list,获取一批请求包号…...

并发工具CountDownLatch、CyclicBarrier、Semaphore
文章目录 学习链接CountDownLatchCountDownLatch类的作用类的主要方法介绍图解await和countDown方法两个典型用法注意点总结示例CountDownLatchDemo1CountDownLatchDemo2CountDownLatchDemo1And2 CyclicBarrierCyclicBarrier循环栅栏CyclicBarrier和CountDownLatch的区别示例Cy…...

十二. Redis 集群操作配置(超详细配图,配截图详细说明)
十二. Redis 集群操作配置(超详细配图,配截图详细说明) 文章目录 十二. Redis 集群操作配置(超详细配图,配截图详细说明)1. 为什么需要集群-高可用性2. 集群概述(及其搭建)3. Redis 集群的使用4. Redis 集群故障恢复5. Redis 集群的 Jedis 开发(使用Java…...

网络工程师 (26)TCP/IP体系结构
一、层次 四层: 网络接口层:TCP/IP协议的最底层,负责网络层与硬件设备间的联系。该层协议非常多,包括逻辑链路和媒体访问控制,负责与物理传输的连接媒介打交道,主要功能是接收数据报,并把接收到…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...