java语言之super关键字详解

article/2025/9/15 3:51:22

文章目录

    • 前言
  • 一、super介绍
  • 二、super的语法
  • 三、super内存图
  • 四、super小结

前言

你第一次遇到super关键字是什么时候呢?是不是使用IDEA或者eclipse快捷键生成类构造方法的时候出现在构造方法第一行的super()语句呢?在没有了解super关键字之前,相信你是很疑惑这行代码的作用的,没关系,本文带你全面详解super关键字,你就会知道这行代码有什么作用了(偷偷告诉你,实际上没有什么用,因为就算没有这一行代码JVM也会默认自动调用的)

一、super介绍

我们将super关键字与this关键字对比来介绍,因为两者有许多相似之处:
1.this只能出现在构造方法和实例方法(不带staric关键字的方法)之中,代表的是当前正在调用这个方法的对象
2.super也只能出现在构造方法和实例方法中,代表的是当前对象的父类型特征
注意:怎么去理解这个父类型特征呢?

 -  super关键字代表的就是“当前对象”的那部分父类型特征。比如: 我继承了我父亲的一部分特征 例如:眼睛、皮肤等那么super代表的就是“眼睛、皮肤等”,“眼睛、皮肤等”虽然是继承了父亲的,但这部分是长在我身上的。

二、super的语法

1.super的第一种语法是:“super(实参列表)”

这种语法的作用是:通过子类的构造方法去调用父类的构造方法,用来给当前子类的父类型特征初始化值。
注意:
1.这里的父类型特征指的是从父类继承过来的那部分属性或者行为
2.虽然调用了父类的构造方法,但是并没有在底层创建父类对象,只是给当前子类对象的父类型特征赋了值,实际上对象只有当前子类对象一个
3.super(实参列表)只能出现在子类构造方法的第一行
4.super(),括号里没有参数代表调用父类的无参数构造方法
5.因为需要模拟现实世界中有父母才会有儿子的这种关系,所以java有一条语法就是:子类的构造方法中第一行如果没有super(),也会默认有一个super(),表示通过子类构造方法去调用父类的无参构造方法,所以还必须保证父类的无参构造方法一定存在。
解释一下前言所提出的问题:   
我们知道java中有一个超级父类Object类,所有引用数据类型都是Object的子类,
包括自己自定义的类也会默认继承Object,所以当你使用快捷键生成一个类的构
造方法的时候,会默认在构造方法第一行出现super()代码,你将这一行代码删除
了也没事,因为会默认有这一行代码。   

举例代码如下:

public class Super {public static void main(String[] args) {Son son = new Son("张三",18,"华为");System.out.println(son.name);System.out.println(son.age);System.out.println(son.phoneName);}
}
/*** 父亲类:Parent* 说明:* 1.属性有:姓名、年龄、手机名* 2.方法有:构造方法*/
class Parent{String name;//姓名int age;//年龄String phoneName;//手机名//无参构造public Parent() {}//有参构造public Parent(String name, int age, String phoneName) {this.name = name;this.age = age;this.phoneName = phoneName;}
}
/*** 儿子类:Son 继承父亲类* 说明:属性和方法都继承于父亲,也就是说,此时的Son所有属性和方法都是“父类型特征”*/
class Son extends Parent{//子类Son的有参构造public Son(String name,int age,String phoneName) {//调用super(实参列表)调用父类的有参构造//给当前子类的父类型特征初始化值,其实也就是子类自己的属性//只不过是调用了父类的构造方法来初始化值super(name, age, phoneName);}
}

执行结果图示:
在这里插入图片描述

2.super的第二种语法是:“super.成员变量” 或者“super.成员方法”

这种语法的作用是:区分子类和父类中相同名字的成员变量或者相同名字的成员方法。

举例如下:假设有父亲类和儿子类,让儿子类去继承父亲类,儿子类和父亲类的属性和方法都相同,如何通过儿子类去访问继承自父亲的那部分特征呢,只有调用super关键字来区分,代码如下。

public class Super {public static void main(String[] args) {//创建一个儿子对象//注意:传入的参数赋值给了子类自身的属性,子类继承的父类型特征默认给了值: super("张三",50,"oppo");Son son = new Son("小小小张三",18,"华为手机");//此时调用son的访问父类型特征方法son.getParentData();}
}
/*** 父亲类:Parent* 说明:* 1.属性有:姓名、年龄、手机名* 2.方法有:构造方法、玩手机方法*/
class Parent{String name;//姓名int age;//年龄String phoneName;//手机名//无参构造public Parent() {}//有参构造public Parent(String name, int age, String phoneName) {this.name = name;this.age = age;this.phoneName = phoneName;}//玩手机方法public void playPhone(){System.out.println("父亲在玩手机!");}
}
/*** 儿子类:Son 继承父亲类* 1.属性有:姓名、年龄、手机名* 2.方法有:构造方法、玩手机方法、访问父类型特征方法*/
class Son extends Parent{String name;//姓名int age;//年龄String phoneName;//手机名//无参构造public Son() {}//有参构造public Son(String name, int age, String phoneName) {//通过子类给从父亲继承过来的父类型特征赋值super("张三",50,"oppo");//给子类自己的属性赋值//注意:子类中的name等属性和方法 与 父类中的name等属性和方法 是不同的this.name = name;this.age = age;this.phoneName = phoneName;}//设计一个访问父类型特征的方法public void getParentData(){//如果以下属性和方法都不加super关键字,那么就是调用子类自身的属性和方法System.out.println("父类型特征的name:" + super.name);System.out.println("父类型特征的age:" + super.age);System.out.println("父类型特征的phoneName:" + super.phoneName);//父类型特征的玩手机方法super.playPhone();}//玩手机方法public void playPhone() {System.out.println("儿子在玩手机!");}
}

程序执行结果为:
在这里插入图片描述

三、super内存图

还是以上边提出的父亲类和儿子类为例:
注意:子类中调用super()父类的构造方法,父类的构造方法还会继续调用它的父类的super()构造方法,但是实际上对象只创建了一个。所有调用的super()构造方法只是在子类对象在JVM堆区中的那一块空间中占用一小部分来给父类型特征初始化值。
在这里插入图片描述

四、super小结

1.super只能出现在构造方法和实例方法
2.super有两种语法
1)super.成员属性 或者 super.实例方法
作用:调用那部分父类型特征的属性或者方法(大多时候可以省略)
2)super(实参列表)
作用:通过子类构造方法去初始化从父类继承过来的那部分父类型特征
3.super是一个对象级的关键字,也就是说得有对象才能调用super,所以super不能出现在静态方法中(带有static关键字的方法)
4.当访问的子类属性与父类继承过来的属性或方法名字不一样时,super关键字可以省略不写
5.当访问的子类属性与父类继承过来的属性或方法名字一样时,你又想要访问父类型的这部分特征时,必须使用super关键字
6.super(实参列表)只能出现在构造方法第一行
7.如果构造方法第一行没有super(),默认第一行有super(),只是你看不到


http://chatgpt.dhexx.cn/article/nbvdgmee.shtml

相关文章

super 关键字的作用

super 关键字的作用 super 代表父类对象,在子类中访问父类成员 访问父类构造方法 在子类方法中调用且必须是第一句 正文 super 关键字与 this 关键字是不一样的,this 表示当前对象,而 super 关键字代表的是父类对象在程序中,它通常…

super关键字的使用

1、super 概念 指的是:父类的 2、super可以修饰属性,可以修饰方法 在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。在通常情况下,super.可以省略不写&#xf…

super关键字

一,什么是super关键字及其作用 super主要是在继承关系下 存在于子类方法中,用于指向子类对象中父类对象。 二,super关键字的三种用法及其在构造方法中的注意事项 1:super.父类的成员变量 (1)如下代码所…

Qt开源炫酷界面QCoolPage

背景介绍 做开发有大概三年时间了,先后做过MFC,上位机(Qt),游戏服务端(C),HTTP客户端(Qt)以及使用Qt做精美UI架构,也是积累了一些Qt方面的心得&a…

QT之界面布局

1. Qt界面布局 Qt的界面布局大致分为三类:水平布局、垂直布局、栅格布局(以下示例图出自一位灵魂画师) 水平布局 垂直布局 栅格布局 2. 我们为什么需要界面布局 1. 美观 美观是显而易见的,我们通过一个简单地示例来演示一…

Qt界面设计总结

1. 子窗体或控件,重写paintEvent事件,画边框、背景、文字、图片效果比较好。用paintEvent 事件画边框,用QPalette设置背景。 // 画边框 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(…

Qt的ui界面操作

界面布局 界面布局的美化:拖拽widget,进行布局:水平布局、垂直布局、栅格布局;以及打破布局等。默认窗口和控件之间有9像素间隙,可以调整layoutLeftMargin 等属性若要使得widget大小和控件大小一样大,可以…

Qt界面开发(二)

首先给一个福利,学习qtQuick好的github地址。 https://github.com/zhengtianzuo/QtQuickExamples 效果图: 1.计划日历 下载地址:https://download.csdn.net/download/zhangxiaoyu_sy/10436208 2.无边框界面 下载地址:https://download.csdn.net/download/zhangxia…

Qt如何调用建立好的ui界面

在我们刚才学习qt的时候,很多的时候,按照新建立的工程文件,出现一个困扰。就是如何调用额外建立的UI界面。在这里主要是说明这里的面的关键因素。其实学习qt,如果之前有过学过C的同事,那么就学习qt就会很容易上手。因为…

Qt实战案例(13)——Qt的界面外观详细介绍

目录 一、Qt风格1.1 对风格进行预览1.2 风格使用 二、Qt样式表2.1 使用代码设置样式表2.2 在设计模式中设置样式表2.3 Qt样式表的语法2.4 子控件(Sub-Controls)2.5 伪状态(Pseudo-States)2.6 继承2.7 qss2.8 代码示例 三、特殊效果…

Qt-UI 界面工具库简介

一、关于Qt-UI界面工具库 Qt-UI界面工具库是武汉维仕杰科技有限公司基于Qt上进行扩展开发的控件包和界面工具,并且拥有完全自主的知识产权。得益于丰富的界面开发经验和强大的支持团队,使得Qt-UI界面开发工具成为最专业、功能强大的Qt开发工具库。 Qt-…

Qt UI界面美化

关于QSS 除原生界面外,Qt提供了加载配置文件的方式来自定义和美化界面外观,这个配置文件也叫做样式表(QSS:Qt Style Sheets),它的语法与css类似,具体支持属性可参考官方文档。 编写QSS文件 新建一个文件…

【思想落地】一文分享Qt界面的设计与开发

文章目录 一、开篇二、软件界面功能分析三、界面实现(3-1)从界面整体角度规划功能和切片(3-2)顶部时间参数的处理(3-3)左侧/右侧按钮控制区(3-4)中央传感器显示(3-5&…

Qt调用主界面ui

一、适用情景 在其他类中使用主界面ui,this,控件操作等 二、步骤 首先,子类需要包含主界面的头文件和ui_xx.h文件,声明主界面类 然后使用构造函数把主界面的指针传递给子类 子类头文件: #ifndef ONEUI_H #define O…

QT——可视化界面ui

目录 1. 需要文件 2.文件关系及编写 3. 源码 4. 界面的模态与非模态 1. 需要文件 test.cpp test.h test.ui ui_test.h 2.文件关系及编写 test.ui: 可视化界面; test.cpp: 启动可视化界面,及可视化界面的各种相关功能源文件&#x…

QT中界面切换的三种方式

本周学习了QT的使用。QT身为一个图形界面的开发框架,在实际使用时必不可少的一环就是对不同界面的切换。本文中总结了自己练习使用过的三种切换界面的方式。 第一种:哪里进行界面切换就在哪里创建界面。 这种方式也是最容易理解的一种,当我们…

Qt界面开发(三)

这次要给大家分享一些我在github和qtcn(主要是liudianwu大神,Qt界面开发(一)有很多都是他的作品)上找到的比较漂亮且实用Qt界面和控件集合。 -------------------------------------我是分割线------------------------------------- &…

QT界面美化

转自点击打开链接 - 经验总结 1. 可用对话框(QDialog)模拟类似Android中toast的效果。 - 设置程序界面风格 在main函数中 QApplication::setStyle("windows"); QApplication::setStyle("windowsxp"); QApplication::setStyle("…

QT介绍和基本界面构建(QT一)

目录 一、Qt 介绍二、Qt工程1.工程 firstQt.pro2.Qt入口 三、用Qtcreator集成开发环境创建Qt工程代码ui1.创建项目的时候注意的问题2.desgner设计器界面说明 四、纯代码实现Qt工程创建带ui界面编译运行五、基本组件(QLineEidt, QLabel, QPush…

QT 简单的登录界面

一、描述 有登录界面、注册界面,用到sqlite数据库保存账号和密码,界面还没有布局美化等,只实现了最基本的功能。 二、界面及功能介绍 1、登录界面2、注册界面 3、主界面 没想好弄啥功能,于是就弄了两个按钮。 4、文件结构 三、…