热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Super关键字的用法与应用场景

深入探讨Super关键字在面向对象编程中的重要性及其具体应用。Super关键字主要用于子类中调用父类的构造方法或成员变量,确保子类能够正确初始化从父类继承的属性,避免代码冗余,提高代码的可维护性和复用性。此外,通过对比this关键字,明确super与this的区别,有助于开发者更好地理解面向对象编程的核心概念。
为什么需要学习super?

能够帮助子类 初始化 父类继承下来的成员,从而简化代码\color{red}{简化代码}

super的定义:

与this概念区分


  • this代表当前对象,创建任何一个对象,都会创建一个this引用和该对象指向同一个堆区的空间,this就是一个地址\color{red}{this就是一个地址}this
  • super代表父类存储空间的标识,super可以通过这个标识访问父类的成员,super可以理解为父类对象,
  • this可以作为参数传入到方法的形参中\color{red}{this可以作为参数传入到方法的形参中}this ,super不可以

super和this访问成员的特点:

成员变量

  • this.成员变量

  • super.成员变量

成员方法

  • this.成员方法

  • super.成员方法

构造方法

  • this(参数列表) ----------------只能在构造方法中写

  • super(参数列表)


特点分析


  • 任何一个构造方法第一句都会先访问父类无参构造方法

  • this super 访问构造方法必须出现第一句

  • this 和 super 访问构造方法不能够共存

  • super可以访问父类的成员(*************但不能访问private*****************)

  • 7.static上下文不能够出现this super(static加载好了,可能对象还没被创建)


1.为什么访问子类构造方法之前会访问父类构造方法?

访问父类无参构造方法导致所有的父类的静态成员和静态代码块被加载,最终根类Object类的注册方法也会被加载 帮助子类初始化父类继承过来的成员、方法\color{red}{ 帮助子类初始化父类继承过来的成员、方法}

2.访问子类构造方法会访问父类构造方法,那么会不会创建子类对象的同时创建父类对象?

不会 使用super/this方法构造方法就相当于调用普通方法,需要创建对象访问构造方法必须结合 new

super相关面试题

输出10 20 30 40


public class SuperDemo02 {public static void main(String[] args) {Son son = new Son();son.show();}
}class Father {int num = 30;public void show() {int num = 40;System.out.println(num);}
}class Son extends Father {int num = 20;public void show() {int num = 10;// 希望打印结果是 10System.out.println(num);// 希望打印结果是 20System.out.println(this.num);// 希望打印结果是 30System.out.println(super.num);// 希望打印结果是 40super.show();}}

另一个代码题

请问输出的值是多少?

public class SuperDemo03 {public static void main(String[] args) {Zi zi = new Zi();System.out.println(zi.num);}
}class Fu {int num = 10;public Fu(int num) {this.num = num;}
}class Zi extends Fu {int num = 20;
}

其实这段代码会报错,因为在ZI类实例化时会自动调用父类的无参构造方法,但是父类的无参构造没有了(Fu已经写了构造方法,会覆盖系统给Fu的无参构造)
此时没有无参构造,则报错!
解决方法:在Fu中添加无参构造
正常情况下是20


推荐阅读
  • 在上篇文章的基础上,本文将继续探讨 Linux 设备驱动中的设备模型与 `devicedriverbus` 机制。在将设备注册到总线之前,需要先创建 `device` 对象。可以通过静态定义 `device` 结构体变量,并调用 `device_register` 函数来完成这一过程。此外,文章还将详细解析设备模型的内部工作机制,以及 `devicedriverbus` 机制如何实现设备与驱动的自动匹配和管理。 ... [详细]
  • 利用 Java 枚举实现向量操作的枚举化处理 ... [详细]
  • 下面的代码旨在输出其类文件的完整名称。对于不熟悉类字面量的读者,`Me.class.getName()` 方法会返回类的全称,例如 “com.javapuzzlers.Me”。通过这一机制,可以深入了解 Java 类加载和反射机制的内部工作原理。 ... [详细]
  • Java进阶之旅:第六阶段深度解析与实践
    在之前的Java进阶之旅中,我们已经深入探讨了Java语言的核心特性,包括继承、封装和多态。本文将在此基础上,进一步解析第六阶段的关键概念和技术实践,帮助读者深化对Java高级特性的理解和应用。通过具体的代码示例和实际项目中的应用场景,我们将探讨如何高效地利用这些特性解决复杂问题,提升开发效率和代码质量。 ... [详细]
  • 本文深入探讨了Google Guava库中的Optional类,详细解析了其设计原理和使用方法,并结合实际应用场景展示了如何有效避免空指针异常,提高代码的健壮性和可读性。通过具体示例,文章还介绍了Optional类在数据处理、函数式编程等方面的优势,为开发者提供了实用的参考。 ... [详细]
  • 微软发布紧急安全更新,所有Windows 10版本均面临影响!
    微软于周五紧急发布了两项安全更新,旨在解决Windows 10所有版本中Windows Codecs库和Visual Studio Code应用存在的安全隐患。此次更新是继本周初发布的月度例行安全补丁之外的额外措施,凸显了这些问题的紧迫性和重要性。这些漏洞可能被攻击者利用,导致系统权限提升或远程代码执行等严重后果。建议用户尽快安装更新,以确保系统的安全性。 ... [详细]
  • 在 Java 编程中,`if-else-if` 结构是一种重要的条件控制机制,用于根据多个条件进行分支选择。通过合理运用 `if`、`else if` 和 `else` 语句,可以有效地处理复杂的逻辑判断,提高代码的可读性和维护性。本文详细探讨了 `if-else-if` 语句的应用场景及其优化技巧,帮助开发者更好地理解和利用这一关键语法结构。 ... [详细]
  • 在Adobe After Effects中,通过高效添加地图指北针,可以显著提升地理信息的准确性和视觉效果。本文介绍了一种方法,利用代码函数 `public static void ExportMapEx(string filepath, int resolution, AxMapControl curMapControl)`,实现地图导出时自动添加指北针,确保地理数据的精确性和一致性。此外,还详细探讨了如何优化指北针的位置和样式,以增强地图的可读性和专业性。 ... [详细]
  • 程序连接MySQL数据库的多种方法详解 ... [详细]
  • 通过采用JSON数据格式,能够高效且精确地获取用户的实时地理位置信息,为各类位置服务应用提供可靠的数据支持。该方法不仅简化了数据交换流程,还提高了地理信息处理的准确性和效率,适用于移动应用、导航系统及物联网设备等多种场景。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • Python初学者入门指南:从基础到实践的全面学习路径本文为Python初学者提供了一条从基础到实践的全面学习路径。特别介绍了Python字典(Dictionary)中的`items()`方法,该方法用于返回字典中所有键值对的视图对象,便于在循环和其他操作中使用。通过实例讲解,帮助读者更好地理解和应用这一重要功能。 ... [详细]
  • 安装Qt时,Qt\Qt5.x.x文件夹下自动安装了example文件夹,其中包含了大量的示例。这里根据Examples\Qt-5.5\widgets\t ... [详细]
  • 力扣——两数之和JAVA
    图片中的方法仅为个人理解,欢迎各位在下方评论 packagecom.shengda.Demo0Likou;importjava.util.HashMap; impor ... [详细]
  • Java包功能详解:初学者指南(附带教学视频解析)
    本文详细解析了Java包的功能及其对初学者的重要性,并通过教学视频进行辅助讲解。文章首先介绍了包的主要作用,包括避免类和方法的命名冲突以及便于管理和组织大量的Java类。随后,逐步引导读者了解工具包中的各个工具类,如StringUtil等,并详细说明了如何配置CLASSPATH环境变量,确保项目中能够正确引用这些类。 ... [详细]
author-avatar
卢代马OR撸代码
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有