首页 > 编程语言 >Java进阶篇之super关键字

Java进阶篇之super关键字

时间:2024-08-09 23:26:43浏览次数:20  
标签:Java name 构造方法 子类 进阶篇 Child 父类 super

引言

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

文章目录

一、super关键字的基本概念

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

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

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

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.变量名来访问父类的变量。

class Parent {
    String name = "ParentName";
}

class Child extends Parent {
    String name = "ChildName";

    void printName() {
        System.out.println("Parent name: " + super.name); // 访问父类的name
        System.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.方法名()来调用父类的原始方法,这在需要保留父类部分功能的同时扩展新功能时非常有用。

class Parent {
    void display() {
        System.out.println("Parent Display");
    }
}

class Child extends Parent {
    @Override
    void 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的高级特性,敬请期待!

标签:Java,name,构造方法,子类,进阶篇,Child,父类,super
From: https://blog.csdn.net/QWERTYwqj/article/details/141072829

相关文章

  • java 生成 二维码
    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。导入对应的jar包<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <v......
  • Java学习进度汇报
    在学习Java编程的过程中,运算符的理解与应用对我来说非常重要。运算符是编程语言的基本组成部分,帮助我们进行数据处理和逻辑判断。首先,算术运算符(如加、减、乘、除和取余)使我能够进行各种数学计算。通过编写计算器程序,我掌握了如何利用这些运算符进行实时计算,增强了对数值处理的理......
  • java流程控制之顺序结构
    java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。顺序结构是最简单的算法结构。语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一种算法都离不开的一种基本算法结构由于我idea使用过期,目前还没......
  • Java计算机毕业设计基本微信小程序的大学生自习室预约系统
    文末获取资源,收藏关注不迷路文章目录前言主要功能:主要使用技术研究内容核心代码文章目录前言随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,高校各种管理系统层出不穷。高校作为学习知识和技术的高等学府,信息......
  • java毕业设计基于微信小程序的鲜花销售系统Vue+uniapp技术
    文末获取资源,收藏关注不迷路文章目录前言开发意义功能介绍主要使用技术研究内容核心代码文章目录前言在当今社会,随着移动互联网技术的飞速发展和智能手机的普及,人们的消费习惯正在发生深刻的变化。微信作为中国最大的社交媒体平台之一,不仅改变了人们的沟通方式,也深......
  • 【JavaEE初阶】线程安全的集合类
    ......
  • JAVA毕设项目II精准扶贫管理系统
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。源码联系请查看文末一、前言"在全面打赢脱贫攻坚战的背景下,精准扶贫管理系统......
  • javaDoc生成文档
    1.新建一个项目,完成结构以及模型的设置2.建立一个包(将其命名为com.zhiShi.base)3.在base中新建一个java(命名为Doc)4.输入指定代码(publicStringtest(){}以及returnname;)5.右键文件Doc点击openinexplorer6.点击explorer进入文件夹在文件位置处输入cmd空格回车......
  • Javascript(turfjs)等值线图绘制
    Javascript(turfjs)等值线图绘制舍瓦温 2020-04-07阅读 5 分钟14 使用气象、环境类空间数据绘制等值线通常是由NCL、Python来做,在一些场景中:你只是想在WEB端做一些简单的绘制你的后端只有Node.js环境你纯粹是个前端工程师你也许需要......
  • 基于Springboot的仿淘宝系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的仿淘宝系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。......