【Java核心基础】一文带你了解Java中super关键字的重要作用

news2024/9/25 15:21:25

Java核心基础】一文带你了解Java中super关键字的重要作用! - 程序员古德

“super”关键字在编程中扮演着重要角色,它允许我们直接访问父类中的属性、方法或构造函数,即使子类中存在同名元素。此外,“super()”在子类构造函数中调用父类初始化操作,确保父类属性正确初始化。有时,“super”还可代表当前对象的父类实例,使我们能像操作父类实例一样调用其方法或访问属性。

定义

Java核心基础】一文带你了解Java中super关键字的重要作用! - 程序员古德

super关键字是Java中提供了一种机制,它使得子类可以方便地访问和操作其父类的成员,它是面向对象编程中继承概念的一个重要组成部分,有助于实现代码的重用和多态性,super关键字有如下特点:

  1. 访问父类的构造方法:使用 super() 可以在子类的构造方法中调用父类的构造方法,这通常用于初始化父类中定义的实例变量。
  2. 访问父类的成员变量:如果在子类中定义了一个与父类同名的成员变量,可以使用 super 关键字来引用父类的成员变量。
  3. 访问父类的方法:如果在子类中覆盖(override)了父类的方法,可以使用 super 关键字来调用父类中被覆盖的方法。
  4. 表示父类类型的引用:在子类的实例方法中,super 可以作为一个引用变量来使用,它引用了当前对象的父类类型。

“super”关键字在编程中非常有用,它允许我们直接访问父类中的属性、方法或构造函数,确保我们访问的是父类中的成员而不是子类中的,在子类构建过程中,可以使用“super()”调用父类的初始化操作,此外,“super”还能代表当前对象的父类实例,使我们可以方便地调用父类的方法或访问其属性。

代码案例

【Java核心基础】一文带你了解Java中super关键字的重要作用! - 程序员古德

下面列举了super关键字的几种应用场景,如下:

案例1:调用父类构造方法,这个案例演示了如何在子类的构造方法中通过 super 关键字明确地调用父类的构造方法,以确保父类部分也被正确地初始化。

class Parent {  
    int number;  
  
    // 父类的构造方法  
    Parent(int number) {  
        this.number = number;  
    }  
}  
  
class Child extends Parent {  
    String name;  
  
    // 子类的构造方法,通过super关键字调用父类的构造方法  
    Child(int number, String name) {  
        super(number);  // 调用父类的构造方法,并传递number参数  
        this.name = name;  
    }  
}  
  
public class Test {  
    public static void main(String[] args) {  
        Child child = new Child(10, "Alice");  // 创建Child对象,并传递参数给父类和子类的构造方法  
        System.out.println("Number: " + child.number);  // 输出 "Number: 10"  
        System.out.println("Name: " + child.name);      // 输出 "Name: Alice"  
    }  
}

最后一行输出:

Number: 10  
Name: Alice

在上面的代码中,Child 类继承了 Parent 类,当创建一个 Child 对象时,我们需要为 ParentChild 都提供必要的信息,通过在 Child 的构造方法中使用 super(number),我们明确地调用了 Parent 类的带有一个整数参数的构造方法。

案例2:访问父类方法,这个案例演示了如何在子类中通过 super 关键字访问被重写的父类方法。

// 父类  
class Parent {  
    void showMessage() {  
        System.out.println("Message from Parent");  
    }  
}  
  
// 子类  
class Child extends Parent {  
    void showMessage() {  
        super.showMessage(); // 使用super关键字调用父类的showMessage()方法  
        System.out.println("Message from Child");  
    }  
}  
  
// 测试类  
public class SuperExample {  
    public static void main(String[] args) {  
        Child child = new Child(); // 创建Child对象  
        child.showMessage(); // 调用showMessage()方法,输出父类和子类的信息  
    }  
}

最后一行输出:

Child's show()  
Parent's show()

在上面的代码中,Child 类重写了 Parent 类的 show() 方法,但是,我们还在 Child 类中定义了一个 showParent() 方法,该方法使用 super.show() 调用了父类的 show() 方法,这样,即使子类重写了该方法,我们仍然可以在子类中访问父类的原始实现。

案例3:访问父类变量,这个案例帮助我们理解了如何在子类中区分和访问父类与子类的同名变量。

// 父类  
class Parent {  
    int number = 10;  
}  
  
// 子类  
class Child extends Parent {  
    int number = 20; // 子类中有一个与父类同名的变量number  
  
    void printNumber() {  
        System.out.println("Parent's number: " + super.number); // 使用super关键字访问父类的number变量  
        System.out.println("Child's number: " + number); // 访问子类的number变量  
    }  
}  
  
// 测试类  
public class SuperExample {  
    public static void main(String[] args) {  
        Child child = new Child(); // 创建Child对象  
        child.printNumber(); // 调用printNumber()方法,输出父类和子类的number变量的值  
    }  
}

最后一行输出:

Parent's number: 10  
Child's number: 20

这个修正版的案例3演示了如何在子类中通过super关键字访问被遮蔽(shadowed)的父类变量,在printNumber()方法中,我们首先使用super.number访问父类的number变量,然后直接使用number访问子类的number变量。最后一行输出了父类和子类中number变量的值,分别是10和20。

核心思考

【Java核心基础】一文带你了解Java中super关键字的重要作用!- 程序员古德

“super”关键字在编程中用于访问父类元素,包括属性、方法和构造函数。当子类中存在与父类同名的成员时,“super”确保我们访问的是父类成员。同时,在子类构建过程中,可以使用“super()”调用父类的初始化操作。此外,“super”还能代表当前对象的父类实例,使我们能够方便地调用父类方法或访问其属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1334648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项(ffmpeg)总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个: 一、基本情况 这次爬取的方…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件…

【RocketMQ】Console页面报错:rocketmq remote exception,connect to xxx failed.

现象 console报错,无法连接该节点,把该节点杀掉,还是继续报错,重启之后,报错的端口变成11911。 分析 正常一个broker会启动三个端口,不同版本的规律不太一样,4.X版本是: 配置文件…

如何使用ScrapySharp下载网页内容

C#简介 C#是一种由微软开发的通用、面向对象的编程语言。它结合了C和C的优点,并封装了Java的一些特性。C#被广泛评价Windows平台的软件开发,包括Web应用、桌面应用和游戏开发等领域。 使用场景 在网络数据挖掘和信息收集的过程中,我们需要…

3D模型如何制作透明玻璃材质

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 1、什么是玻璃材质 在3D建模和渲染中,玻璃是一种非常常见…

【期末复习】微信小程序复习大纲( 1- 5 章)

前言: 这周开始进入期末复习周,没时间看C/C、linux等知识了,先把期末考试必考的知识捋一遍。 目录 第一章 微信小程序入门 一、填空题 二、判断题 三、选择题 四、简答题 第二章 微信小程序页面制作 一、填空题 二、判…

【六大排序详解】中篇 :选择排序 与 堆排序

选择排序 与 堆排序 选择排序 选择排序 与 堆排序1 选择排序1.1 选择排序原理1.2 排序步骤1.3 代码实现 2 堆排序2.1 堆排序原理2.1.1 大堆与小堆2.1.2 向上调整算法2.1.3 向下调整算法 2.2 排序步骤2.3 代码实现 3 时间复杂度分析 Thanks♪(・ω・)&#…

智慧交通应用钡铼技术无线工业边缘路由网关R10A

智慧交通应用中,无线工业边缘路由网关扮演着至关重要的角色。在这方面,钡铼技术无线工业边缘路由网关R10A被广泛应用于交通管理系统中,它具备一路RS485、一路WAN、一路LAN、4G和WiFi等功能。本文将详细介绍R10A的参数以及在智慧交通领域的应用…

蓝桥题库(X图形(矩阵))

题目剖析: 简单来说就是找到一个由字母组成的X图形,且每个边上的字母都与中心点的字母相同 算法设计: 1.从中心点向外辐射,每找到一个这样的图形,则次数加一 2.从最外层向中心点靠拢,如果中间遇到不满足…

Unity Shader Early-Z技术

Unity Shader Early-Z技术 Early-Z技术Unity渲染顺序总结Alpha Test(Discard)在移动平台消耗较大的原因 Early-Z技术 传统的渲染管线中,ZTest其实是在Blending阶段,这时候进行深度测试,所有对象的像素着色器都会计算一…

外汇天眼:交易高手!是这样炼成的!

在外汇市场中,那些总是赚的“盆满钵满”的外汇投资高手实在是让人羡慕不已,他们能够准确预测市场走势,抓住每一个交易机会,实现高收益,很多投资新手因此也想入市,但即使是这样,还是有很多新手对…

关于标准那些事——第五篇 两仪

国家标准的编写,对于标准的名称和结构,很多人往往是不那么在意的,但这恰恰也是非常重要的点,今天就给大家分享一下这太极所生的“两仪”。我会用最精简的文字概括出核心内容,让大家有一个初步且完整的概念,…

规律生活指南:数据可视化助你游刃有余

随着信息时代的到来,我们生活在一个数据海洋中,每天都会面对大量的信息和数字。在这个信息过载的时代,如何从杂乱的数据中找到规律,让生活更加有序成为了一项挑战。而数据可视化作为一种强大的工具,不仅能够帮助我们理…

算法基础之数字三角形

数字三角形 核心思想&#xff1a;线性dp 集合的定义为 f[i][j] –> 到i j点的最大距离 从下往上传值 父节点f[i][j] max(f[i1][j] , f[i1][j1]) w[i][j] 初始化最后一层 f w #include <bits/stdc.h>using namespace std;const int N 510;int w[N][N],f[N][…

ACM模式Java输入输出模板

输入输出练习网站&#xff1a;https://kamacoder.com/ Java读写模板 Scanner 方式一&#xff1a;Scanner&#xff08;效率不高&#xff09; public class Main {public static void main(String[] args) {// 第一个方式ScannerScanner sc new Scanner(System.in);String s …

SpringMVC核心处理流程梳理

1、处理流程图展示 当我拿出这张图&#xff0c;阁下又该如何应对呢&#xff1f;执行流程是不是一目了然了。 2、DispatcherServlet&#xff1a;中央处理器或者中央调度器 下图官方的解释应该最完善了。 3、SpringMVC三大核心组件 HandlerMapping 处理器映射器&#xff0c;…

vue使用ElementUI搭建精美页面入门

ElementUI简直是css学得不好的同学的福音 ElementUI官网&#xff1a; Element - The worlds most popular Vue UI framework 安装 在vue文件下&#xff0c;用这个命令去安装Element UI。 npm i element-ui -S step1\先切换到vue的目录下去&#xff0c;注意这里面的WARN不是…

Ubuntu系统如何安装SVN服务端并通过客户端无公网ip实现远程访问?

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Unity重写Inspector简化分组配置文件

Unity重写Inspector简化分组配置文件 重写Inspector创建分组管理配置文件创建修改参数参数对应类工程在我的资源中名为CreateConfig&#xff0c;免费下载 重写Inspector创建分组管理配置文件 创建 修改参数 参数对应类 using UnityEngine;public class GameConfig : Scriptab…

CSS样式斜切边

html部分 <div class"rectangle"></div> 样式一&#xff1a; .rectangle { width: 251px; height: 75px; background: linear-gradient(-135deg, transparent 52px, #ffffff 0) top right; background-size: 100% 100%; background-repeat: no-repeat; b…