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

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 到视频的全自动转换&#xff0…...

【鸿蒙开发】第二十四章 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;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

TDengine 快速体验(Docker 镜像方式)

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

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用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全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用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 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...