Java进阶篇之super关键字

embedded/2024/10/19 13:24:24/
引言

在前面的文章中,我们介绍了继承的相关概念(Java进阶篇之继承的概念),在Java继承机制中,super关键字是一个重要的工具,用于访问父类的属性和方法,特别是在子类覆盖了父类的成员时。通过使用super,子类可以调用父类的构造方法,访问父类的成员变量和方法,这在继承层次中至关重要。本文将深入探讨super关键字的使用方式及其相关注意事项。

文章目录

        • 引言
        • 一、super关键字的基本概念
        • 二、调用父类的构造方法
        • 三、访问父类的属性
        • 四、调用父类的方法
        • 五、super关键字的注意事项
        • 六、知识结构图解
        • 七、总结

一、super关键字的基本概念

super关键字用于引用父类对象,可以在以下几种场景中使用:

  • 调用父类的构造方法:使用super()可以调用父类的构造方法,这是构造子类对象时初始化父类的一种方式。
  • 访问父类的属性:在子类中,如果成员变量与父类同名,可以通过super来访问父类的成员变量。
  • 调用父类的方法:子类可以通过super调用父类被重写的方法。
二、调用父类的构造方法

在子类的构造方法中,super()必须是第一条语句,用于调用父类的构造方法。默认情况下,子类的构造方法会自动调用父类的无参构造方法,如果需要调用父类的有参构造方法,需要显式地使用super(参数)

java">class Parent {String name;Parent(String name) {this.name = name;System.out.println("Parent constructor called");}
}class Child extends Parent {int age;Child(String name, int age) {super(name); // 调用父类的构造方法this.age = age;System.out.println("Child constructor called");}
}public class Main {public static void main(String[] args) {Child child = new Child("John", 18);}
}

输出

Parent constructor called
Child constructor called

在这个例子中,Child类的构造方法通过super(name)调用了Parent类的构造方法,从而实现了对父类属性的初始化。

三、访问父类的属性

在子类中,如果存在与父类同名的成员变量,可以使用super.变量名来访问父类的变量。

java">class Parent {String name = "ParentName";
}class Child extends Parent {String name = "ChildName";void printName() {System.out.println("Parent name: " + super.name); // 访问父类的nameSystem.out.println("Child name: " + this.name);   // 访问子类的name}
}public class Main {public static void main(String[] args) {Child child = new Child();child.printName();}
}

输出

Parent name: ParentName
Child name: ChildName

通过super.name,我们可以在Child类中访问Parent类的name属性,避免了与子类name属性的冲突。

四、调用父类的方法

在子类中重写父类的方法后,可以使用super.方法名()来调用父类的原始方法,这在需要保留父类部分功能的同时扩展新功能时非常有用。

java">class Parent {void display() {System.out.println("Parent Display");}
}class Child extends Parent {@Overridevoid display() {super.display(); // 调用父类的display方法System.out.println("Child Display");}
}public class Main {public static void main(String[] args) {Child child = new Child();child.display();}
}

输出

Parent Display
Child Display

在这个例子中,Child类重写了Parent类的display方法,并通过super.display()调用了父类的方法,实现了方法的扩展。

五、super关键字的注意事项

重要注意事项

  • super必须在子类构造方法的第一行:在子类构造方法中调用super()时,它必须是第一条语句,否则会导致编译错误。
  • 不能使用super调用父类的私有方法或属性super只能访问父类的公共(public)和受保护(protected)成员,无法访问父类的私有(private)成员。
  • 避免与this混淆super用于访问父类的成员,而this用于访问当前类的成员。两者的使用场景不同,需注意区分。
六、知识结构图解

以下是关于super关键字的知识结构图解:

super关键字的基本概念
调用父类的构造方法
super
访问父类的属性
避免命名冲突
调用父类的方法
方法扩展
super关键字的注意事项
super必须在子类构造方法的第一行
不能访问父类的私有成员
与this的区别
七、总结

super关键字在Java的继承机制中扮演着重要的角色,它允许子类访问和调用父类的属性和方法,特别是在子类重写了父类的成员时。通过合理使用super,开发者可以在子类中保留父类的功能,并在此基础上进行扩展。掌握super关键字的用法对于理解Java的继承机制至关重要。在下一篇文章中,我们将继续深入探讨Java继承中的重写和Java中重载的区别以及其他重要概念,帮助你更好地掌握Java的高级特性,敬请期待!


http://www.ppmy.cn/embedded/93356.html

相关文章

手机维修--学习笔记(一)

最近觉得手机主板维修比较有意思,观看许多师傅的维修视频,并做笔记如下: 手机主板维修: 【手机电路板怎么修,师傅对着电路图一步一步讲解,看完受益匪浅】https://www.bilibili.com/video/BV13A411v7wL?v…

pip笔记

pip介绍 pip的全称:package installer for python,也就是Python包管理工具。 配置镜像源 镜像列表 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣 http://pypi.douban.com/simple/清华大…

如何将neo4j,4.x版本部署到服务器上

一. 简介 当我们使用neo4j构建知识图谱时,我们希望让别人能和我们共用neo4j进行知识图谱的构建,我们的方法之一就是将neo4j部署到我们的服务器上,然后将7474,7687端口暴露出来,这样就可以通过访问服务器公网IP的7474端口来操作我…

鸿蒙应用服务开发【自定义通知角标】

自定义通知角标 介绍 本示例主要展示了设定应用的桌面图标角标的功能,使用ohos.notificationManager接口,进行桌面角标的设置,通知的发送,获取等。 效果预览 使用说明 在主界面,可以看到当前应用的所有消息通知&am…

【经验分享】ShardingSphere+Springboot-04:自定义分片算法(COMPLEX/STANDARD)

文章目录 3.4 CLASS_BASED 自定义类分片算法3.4.1 复杂分片自定义算法(strategyCOMPLEX )3.4.2 STANDARD 标准分片自定义算法## 进阶:star: 自定义算法范围查询优化 3.4 CLASS_BASED 自定义类分片算法 3.4.1 复杂分片自定义算法(strategyCOM…

Linux部署MySQL8.0

目录 一、部署前准备1.1、查看系统版本和位数(32位或64位)1.2、下载对应安装包 二、开始部署1、将安装包解压并且移动到目标安装目录2、准备MySQL数据和日志等存储文件夹3、准备MySQL配置文件 my.cnf4、创建mysql单独用户组和用户,将安装目录…

【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、树 1.树的概念与结构 2.树的相关术语 3.树的表示方法 4.树型结构的实际应用场景 二、二叉树 1.二叉树的概念与结构 2.二叉树的…

在CentOS 7上安装Git的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 版本控制已经成为现代软件开发中不可或缺的工具。版本控制系统允许您在源代码级别跟踪软件。您可以跟踪更改、恢复到先前阶段&…