当前位置: 首页 > 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 中的继承机制以及相关知识点!如有任何疑问,欢迎在评论区留言讨论。

http://www.lryc.cn/news/533337.html

相关文章:

  • 语言月赛 202308【小粉兔做麻辣兔头】题解(AC)
  • 云原生后端|实践?
  • GrassWebProxy
  • 6.Python函数:函数定义、函数的类型、函数参数、函数返回值、函数嵌套、局部变量、全局变量、递归函数、匿名函数
  • 青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用
  • CosyVoice /F5-TTS /GPT-SoVITS /Fish-Speech 开源语音克隆与文本转语音(TTS)项目的对比整理
  • MySQL基于binlog和gtid主从搭建方案
  • 5 计算机网络
  • Vim跳转文件及文件行结束符EOL
  • 智能理解 PPT 内容,快速生成讲解视频
  • 【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)
  • Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用
  • 番外02:前端八股文面试题-CSS篇
  • Redis Copilot:基于Redis为AI打造的副驾工具
  • JavaScript遍历对象的7种方式
  • 如何避免NACK重传风暴
  • 并发工具CountDownLatch、CyclicBarrier、Semaphore
  • 十二. Redis 集群操作配置(超详细配图,配截图详细说明)
  • 网络工程师 (26)TCP/IP体系结构
  • TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...
  • 保姆级教程--DeepSeek部署
  • 机器学习之心的创作纪念日
  • VeryReport和FastReport两款报表软件深度分析对比
  • libtorch的c++,加载*.pth
  • 去除 RequestTemplate 对象中的指定请求头
  • b s架构 网络安全 网络安全架构分析
  • 【DeepSeek论文精读】2. DeepSeek LLM:以长期主义扩展开源语言模型
  • Spring Boot和SpringMVC的关系
  • java基础4(黑马)
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug